0

我正在评估分布式查询引擎,用于对大规模数据(~100GB)进行分析查询(交互式查询和批处理查询)。要求之一是计数不同的查询的低延迟(<= 1s),其中近似结果(最多 5% 的错误)是可以接受的。

Presto 似乎通过它的 approx_distinct() 来支持这一点。据我了解,它为此使用了 HyperLogLog。但是,除非数据以汇总形式与 HyperLogLog 值一起保存,否则必须动态计算。对于大型数据集,我认为我的查询不会在一秒钟内完成。

它是否支持在摄取时使用 HyperLogLog 计算汇总(类似于 Druid)?鉴于与 Druid 不同,Presto 从外部存储(Hive/Cassandra/RDBMS 等)查询数据,我不确定是否支持摄取时间汇总,除非 Presto 的本机存储支持它们。有人可以确认吗?

4

2 回答 2

1

没有“Presto 的本地商店”之类的东西。Presto 是具有连接器架构的查询执行引擎,允许插入多个存储层。

如果您想要整个数据集的近似计数不同,您可以计算表统计信息(当使用 Presto 和 Hive 时,目前需要在 Hive 中完成)。

如果您想要动态选择数据的近似计数不同,您仍然需要读取数据。这样大数据集就不会出现第二次延迟。但是,您可以结合approx_distinct(或使用 plain count(distinct ..)) withTABLESAMPLE来限制读取数据的大小。

于 2017-08-14T14:04:47.100 回答
0

您可以尝试使用Verdict,它可以通过应用统计信息和近似查询处理来显着降低查询处理成本,达到 99.9% 的准确率。它在所有基于 SQL 的引擎上运行,包括 Apache Hive、Apache Impala、Apache Spark、Amazon Redshift 等。

您可以从这里下载源代码。下载并进行一些简单设置后,您可以像往常一样发出查询,并在更短的时间内获得结果。

于 2017-09-22T22:59:54.207 回答