Hive - SUM 中的 ELSE
Hive - ELSE in SUM
以下 运行 在 RDBMS 数据库上作为 SQL 没问题。但是,这在配置单元上 运行 失败。
SELECT
entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN entry_date ELSE 0 END) AS SLOT_1,
SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN entry_date ELSE 0 END) AS SLOT_2,
SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN entry_date ELSE 0 END) AS SLOT_3
FROM
cust_run_details
WHERE
app_env IN ('a','b')
AND entry_date = '2015-02-01'
AND flag_set='U'
GROUP BY
customer,
customer,
cust_loc
我在 HIVE 上 运行 时得到的错误是
FAILED: SemanticException [Error 10016]: Line 6:80 Argument type mismatch '0': The expression after ELSE should have the same type as those after THEN: "string" is expected but "int" is found
如何将其转换为等效的 Hive?请任何想法在这里帮助我
将 SUM 更改为 COUNT 并删除了 "ELSE 0"。花了很长时间才到那里。叹息..
SELECT
entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
COUNT(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN entry_date END) AS SLOT_1,
COUNT(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN entry_date END) AS SLOT_2,
COUNT(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN entry_date END) AS SLOT_3
FROM
cust_run_details
WHERE
app_env IN ('a','b')
AND entry_date = '2015-02-01'
AND flag_set='U'
GROUP BY
customer,
customer,
cust_loc
假设 entry_date
是 date
,您可能不想 sum()
它。如果你想要不同范围内 运行 次的总和,那么你想要这样的 select
:
SELECT entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN run_time ELSE 0 END) AS SLOT_1,
SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN run_time ELSE 0 END) AS SLOT_2,
SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN run_time ELSE 0 END) AS SLOT_3
如果您想要计算不同范围内的 运行 次,则:
SELECT entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN 1 ELSE 0 END) AS SLOT_1,
SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN 1 ELSE 0 END) AS SLOT_2,
SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN 1 ELSE 0 END) AS SLOT_3
如果 entry_date
可能是 NULL
而您想忽略这些记录,那么您可以在 WHEN
条件中包含 and entry_date is not null
。
以下 运行 在 RDBMS 数据库上作为 SQL 没问题。但是,这在配置单元上 运行 失败。
SELECT
entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN entry_date ELSE 0 END) AS SLOT_1,
SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN entry_date ELSE 0 END) AS SLOT_2,
SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN entry_date ELSE 0 END) AS SLOT_3
FROM
cust_run_details
WHERE
app_env IN ('a','b')
AND entry_date = '2015-02-01'
AND flag_set='U'
GROUP BY
customer,
customer,
cust_loc
我在 HIVE 上 运行 时得到的错误是
FAILED: SemanticException [Error 10016]: Line 6:80 Argument type mismatch '0': The expression after ELSE should have the same type as those after THEN: "string" is expected but "int" is found
如何将其转换为等效的 Hive?请任何想法在这里帮助我
将 SUM 更改为 COUNT 并删除了 "ELSE 0"。花了很长时间才到那里。叹息..
SELECT
entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
COUNT(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN entry_date END) AS SLOT_1,
COUNT(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN entry_date END) AS SLOT_2,
COUNT(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN entry_date END) AS SLOT_3
FROM
cust_run_details
WHERE
app_env IN ('a','b')
AND entry_date = '2015-02-01'
AND flag_set='U'
GROUP BY
customer,
customer,
cust_loc
假设 entry_date
是 date
,您可能不想 sum()
它。如果你想要不同范围内 运行 次的总和,那么你想要这样的 select
:
SELECT entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN run_time ELSE 0 END) AS SLOT_1,
SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN run_time ELSE 0 END) AS SLOT_2,
SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN run_time ELSE 0 END) AS SLOT_3
如果您想要计算不同范围内的 运行 次,则:
SELECT entry_date,
customer,
cust_loc,
SUM(run_time) AS TOTAL_RUN,
SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN 1 ELSE 0 END) AS SLOT_1,
SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN 1 ELSE 0 END) AS SLOT_2,
SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN 1 ELSE 0 END) AS SLOT_3
如果 entry_date
可能是 NULL
而您想忽略这些记录,那么您可以在 WHEN
条件中包含 and entry_date is not null
。