我正在评估分布式查询引擎,用于大规模数据(~100GB)的分析查询(交互式和批量式)。其中一个要求是计数不同查询的低延迟(<= 1s),其中可接受近似结果(误差高达5%)。
Presto似乎用它的approx_distinct()来支持它。据我所知,它使用HyperLogLog。但是,除非数据以卷起的形式持久存在,否则HyperLogLog值必须在运行时进行计算。我不认为我的查询会在一秒钟内完成大型数据集。
它是否支持在摄取时使用HyperLogLog计算汇总(类似于德鲁伊)?鉴于与Druid不同,Presto从外部存储(Hive / Cassandra / RDBMS等)查询数据,我不确定是否支持提取时间汇总,除非Presto的本地存储支持它们。有人可以确认吗?
答案 0 :(得分:1)
没有“Presto的本地商店”这样的东西。 Presto是具有连接器架构的查询执行引擎,允许插入多个存储层。
如果你想要整个数据集的近似计数 - 不同,你可以计算表统计数据(当使用带有Hive的Presto时,这当前需要在Hive中完成)。
如果您想要动态选择数据的近似计数,则仍需要读取数据。然后,您将无法获得具有如此大数据集的第二延迟。但是,您可以将approx_distinct
(或使用普通count(distinct ..)
)与TABLESAMPLE
结合使用,以限制所读数据的大小。
答案 1 :(得分:0)