蜂巢中的 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
可以改变标志的含义。
我给了查询,兼容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
可以改变标志的含义。