grouping()?

8i9zcol2  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(347)

我已经给出了查询,兼容teradata。它使用sqoop导入了维度选项卡中的表。尝试在配置单元上执行,但不幸与配置单元兼容。

SELECT fact_1_id,
       fact_2_id,
       SUM(sales_value) AS sales_value,
       GROUPING(fact_1_id) AS f1g, 
       GROUPING(fact_2_id) AS f2g
FROM   dimension_tab
GROUP BY CUBE (fact_1_id, fact_2_id)
ORDER BY fact_1_id, fact_2_id;

然后我试着让它和Hive兼容。参考:wiki
幸运的是,cube在hive中可用,但语法不同
i、 e.带立方体的事实1\u id、事实2\u id。但是表单文档grouping()在配置单元中不可用。
如果配置单元中有grouping()函数,请帮助我。或者如何在配置单元上运行查询?

zwghvu4y

zwghvu4y1#

如果你没有 NULL 的值 id ,只需使用简单的逻辑:

SELECT fact_1_id,
       fact_2_id,
       SUM(sales_value) AS sales_value,
       (case when fact_1_id is null then 1 else 0 end) as f1g,
       (case when fact_2_id is null then 1 else 0 end) as f2
FROM   dimension_tab
GROUP BY fact_1_id, fact_2_id WITH CUBE
ORDER BY fact_1_id, fact_2_id;

这个逻辑(不是 WITH CUBE ,当然)将在teradata和hive中工作。
否则,如果确实有空值,则可以使用 GROUPING__ID :

SELECT fact_1_id,
       fact_2_id,
       SUM(sales_value) AS sales_value,
       (case when (CAST (GROUPING__ID AS INT) & 1) = 0 then 1 else 0 end) as f1g,
       (case when (CAST (GROUPING__ID AS INT) & 2) = 0 then 1 else 0 end) as f2g
FROM   dimension_tab
GROUP BY fact_1_id, fact_2_id WITH CUBE
ORDER BY fact_1_id, fact_2_id;

注: GROUPING__ID 取决于表达式在 group by ,所以重新安排 group by 可以更改标志的含义。

相关问题