Impala 上的多维数据集运算符
Posted
技术标签:
【中文标题】Impala 上的多维数据集运算符【英文标题】:Cube Operators on Impala 【发布时间】:2017-06-29 10:23:46 【问题描述】:在 Impala 和 PrestoDB 之间进行基准测试时,我们注意到在 Imapala 中构建数据透视表非常困难,因为它没有像 Presto 那样的 Cube 运算符。以下是 Presto 中的两个示例:
CUBE 运算符为给定的一组列生成所有可能的分组集(即幂集)。例如查询:`
SELECT origin_state, destination_state, sum(package_weight)
FROM shipping
GROUP BY CUBE (origin_state, destination_state);
相当于:
SELECT origin_state, destination_state, sum(package_weight)
FROM shipping
GROUP BY GROUPING SETS (
(origin_state, destination_state),
(origin_state),
(destination_state),
());
另一个例子是ROLLUP
运算符。完整文档在这里:https://prestodb.io/docs/current/sql/select.html。
这不是语法糖,因为 PRESTO 对整个查询执行一次表扫描 - 因此使用此运算符可以在 Impala 需要运行 2-3 个查询的一个请求中构建数据透视表。
有没有一种方法可以让我们在 Impala 中使用一个查询/表扫描而不是 3 来做到这一点?否则在创建任何类型的数据透视表时性能会变得很糟糕。
【问题讨论】:
【参考方案1】:我们可以使用 impala windows 函数,但不是单列输出,而是 3 列。
SELECT origin_state,
destination_state,
SUM(package_weight) OVER (PARTITION BY origin_state, destination_state) AS pkgwgrbyorganddest,
SUM(package_weight) OVER (PARTITION BY origin_state) AS pkgwgrbyorg,
SUM(package_weight) OVER (PARTITION BY destination_state) AS pkgwgrbydest
FROM shipping;
【讨论】:
我不确定这是否会帮助你,但你会了解分析函数 链接:cloudera.com/documentation/enterprise/5-6-x/topics/…以上是关于Impala 上的多维数据集运算符的主要内容,如果未能解决你的问题,请参考以下文章
Kylin - 查询 Hbase 上的 OLAP 多维数据集?