蜂巢中的 GROUPING()?

GROUPING() in hive?

我给了查询,兼容teradata。它使用 Sqoop 在 dimension_tab 中导入了 table。试图在 HIVE 上执行,但不幸的是与 hive 兼容。

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 中可用,但语法不同

fact_1_id,fact_2_id 与多维数据集。但是表格文档,GROUPING() 在 HIVE 中不可用。

如果 GROUPING() 函数在 HIVE 中可用,请帮助我。 要么 如何在 HIVE 上查询 运行?

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

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 中都适用。

否则,如果您确实有 NULL 值,则可以使用 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 可以改变标志的含义。