Sql 蜂巢-总的来说是其他的
以下内容在RDBMS数据库上作为SQL正常运行。但是,这无法在hive上运行Sql 蜂巢-总的来说是其他的,sql,hadoop,hive,bigdata,Sql,Hadoop,Hive,Bigdata,以下内容在RDBMS数据库上作为SQL正常运行。但是,这无法在hive上运行 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 W
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
在配置单元上运行时出现的错误是
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
如何将其转换为蜂巢等效物?请告诉我这里有什么想法可以帮助我将总数改为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\u date
是date
,您可能不想sum()
它。如果需要不同范围内的运行时间总和,则需要一个选择,如下所示:
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\u date
可能是NULL
并且您希望忽略这些记录,那么您可以在WHEN
条件中包含并且entry\u date不为NULL
。将总和更改为COUNT并去掉“ELSE 0”。花了很长时间才到达那里。唉……谢谢你,戈登。谢谢你的帮助。