使用CTE计算Hive的子集

时间:2015-07-01 07:30:44

标签: hive hiveql

我想计算Hive表中的行,同时在单个查询中计算子集(基于WHERE子句中的某些条件)。我在这个post中遇到了CTE,我认为它适用于非Hive SQL。我研究了一下,发现Hive有CTE。但是,当我尝试时,此表单在Hive中不起作用:

WITH MY_TABLE AS (
    SELECT *
    FROM orig_table
    WHERE base_condition
)
SELECT
    (SELECT COUNT(*) FROM MY_TABLE) AS total,
    (SELECT COUNT(*) FROM MY_TABLE WHERE cond_1) AS subset_1,
    ...
    (SELECT COUNT(*) FROM MY_TABLE WHERE cond_n) AS subset_n;

Hive有没有解决方法或类似工作的想法?

1 个答案:

答案 0 :(得分:2)

不需要公用表表达式。条款用例总结条件时的用例:

select count(1) as total
    , sum(case when cond_1 then 1 else 0 end) as subset_1
    --...
    , sum(case when cond_n then 1 else 0 end) as subset_n
from orig_table
where base_cond
;