使用 CTE 的子集依赖于 Hive

Subsets count on Hive using CTE

我想计算 Hive 中的行数 table,同时计算单个查询中的子集(基于 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 有解决方法或类似的工作想法吗?

不需要通用 table 表达式。用例 when 子句对条件求和:

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
;