我们可以在不爆炸的蜂巢/火花中爆炸行的情况下进行汇总或立方体吗?



我在蜂巢表(数百亿行(上汇总了4个维度,需要将它们卷起或盘点。假设我的表是关于用户交互的,我将汇总他们使用的移动应用程序,它们拥有的移动操作系统等。SQL看起来像这样:

select d1, d2, d3, d4, count(distinct userId) as uv, sum(1) as pv from T group by cube(d1, d2, d3, d4)

由于当前的分组集/汇总/立方体的实现爆炸了输入(根据此JIRA(,因此总共16次通过了输入,这是非常消耗的资源。

我对此的自定义解决方案是要有一个临时表,我首先将我在用户ID和4个维度上汇总,然后进行汇总。

create table tmp as select userId, d1, d2, d3, d4, sum(1) as pv from T group by userId, d1, d2, d3, d4

然后

select d1, d2, d3, d4, count(1) as uv, sum(pv) as pv from tmp group by cube(d1, d2, d3, d4)

由于输入数据很大,因此进行预差的运行时会大大减少(减少16个通过的输入数据大小(。

所以我想知道Hive/Spark是否可以内置此规则,或者人们通常会处理这个问题,否则我不知道?

no,Spark-SQL催化剂没有任何预算的规则。这是因为Hcatalogue或Spark-SQL目录存储层次结构&那就是为什么它到目前为止没有这种功能。

通常会提供此功能。他们存储层次结构的详细信息并基于层次结构,它计算Olap Cube中的聚集体。

如果您正在寻找OLAP功能,那么您可能应该探索雪花或KyvoSinsights

相关内容

  • 没有找到相关文章

最新更新