Hive case when 引发错误一例
Hive case when 引发错误一例
今天发现hive 在使用 case when then else end 方式下会存在BUG, 具体表现如下,现有表: t_aa_pc_log, 其中一个字段为channel, 当channel值为'NA'或者'EMPTY'时
设置为'A', 其他值设置为'B', 然后输出channel值为'A'的前10个记录
查询一:根据需求写出SQL:
- select a.channel
- from
- (
- select case when channel = 'NA' or channel = 'EMPTY' then 'A' else 'B' end as channel
- from t_aa_pc_log where pt = '2012-04-10-00'
- )a where a.channel='A' limit 10;
查询结果为空:
- hive>
- >
- >
- > select a.channel
- > from
- > (
- > select case when channel = 'NA' or channel = 'EMPTY' then 'A' else 'B' end as channel
- > from t_aa_pc_log where pt = '2012-04-10-00'
- > )a where a.channel='A' limit 10;
- Total MapReduce jobs = 1
- Launching Job 1 out of 1
- Number of reduce tasks is set to 0 since there's no reduce operator
- Starting Job = job_201205162059_1490941, Tracking URL = http://jt.dc.sh-wgq.sdo.com:50030/jobdetails.jsp?jobid=job_201205162059_1490941
- Kill Command = /home/hdfs/Hadoop-current/bin/hadoop job -Dmapred.job.tracker=10.133.10.103:50020 -kill job_201205162059_1490941
- 2012-07-05 14:00:10,528 Stage-1 map = 0%, reduce = 0%
- 2012-07-05 14:00:14,669 Stage-1 map = 100%, reduce = 0%
- 2012-07-05 14:00:15,731 Stage-1 map = 100%, reduce = 100%
- Ended Job = job_201205162059_1490941
- OK
- Time taken: 9.974 seconds
- hive>
查询二:去掉外部查询的where条件:
- select a.channel
- from
- (
- select case when channel = 'NA' or channel = 'EMPTY' then 'A' else 'B' end as channel
- from t_aa_pc_log where pt = '2012-04-10-00'
- )a limit 10;
查询结果有值:
- hive> select a.channel
- > from
- > (
- > select case when channel = 'NA' or channel = 'EMPTY' then 'A' else 'B' end as channel
- > from t_aa_pc_log where pt = '2012-04-10-00'
- > )a limit 10;
- Total MapReduce jobs = 1
- Launching Job 1 out of 1
- Number of reduce tasks is set to 0 since there's no reduce operator
- Starting Job = job_201205162059_1491035, Tracking URL = http://jt.dc.sh-wgq.sdo.com:50030/jobdetails.jsp?jobid=job_201205162059_1491035
- Kill Command = /home/hdfs/hadoop-current/bin/hadoop job -Dmapred.job.tracker=10.133.10.103:50020 -kill job_201205162059_1491035
- 2012-07-05 14:03:55,864 Stage-1 map = 0%, reduce = 0%
- 2012-07-05 14:03:59,913 Stage-1 map = 20%, reduce = 0%
- 2012-07-05 14:04:00,923 Stage-1 map = 60%, reduce = 0%
- 2012-07-05 14:04:01,932 Stage-1 map = 80%, reduce = 0%
- 2012-07-05 14:04:07,019 Stage-1 map = 100%, reduce = 0%
- 2012-07-05 14:04:09,213 Stage-1 map = 100%, reduce = 100%
- Ended Job = job_201205162059_1491035
- OK
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- Time taken: 19.339 seconds
查询三: 在case when中去掉 OR 条件:
- select a.channel
- from
- (
- select case when channel = 'NA' then 'A' else 'B' end as channel
- from t_aa_pc_log where pt = '2012-04-10-00'
- )a where a.channel='A' limit 10;
查询结果有值:
- hive> select a.channel
- > from
- > (
- > select case when channel = 'NA' then 'A' else 'B' end as channel
- > from t_aa_pc_log where pt = '2012-04-10-00'
- > )a where a.channel='A' limit 10;
- Total MapReduce jobs = 1
- Launching Job 1 out of 1
- Number of reduce tasks is set to 0 since there's no reduce operator
- Starting Job = job_201205162059_1491066, Tracking URL = http://jt.dc.sh-wgq.sdo.com:50030/jobdetails.jsp?jobid=job_201205162059_1491066
- Kill Command = /home/hdfs/hadoop-current/bin/hadoop job -Dmapred.job.tracker=10.133.10.103:50020 -kill job_201205162059_1491066
- 2012-07-05 14:05:19,557 Stage-1 map = 0%, reduce = 0%
- 2012-07-05 14:05:22,579 Stage-1 map = 20%, reduce = 0%
- 2012-07-05 14:05:23,736 Stage-1 map = 60%, reduce = 0%
- 2012-07-05 14:05:25,768 Stage-1 map = 80%, reduce = 0%
- 2012-07-05 14:05:26,779 Stage-1 map = 100%, reduce = 0%
- 2012-07-05 14:05:27,855 Stage-1 map = 100%, reduce = 100%
- Ended Job = job_201205162059_1491066
- OK
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- Time taken: 15.219 seconds
|
评论暂时关闭