hive NULL值影響
今天發現一個問題,將資料檔案匯入hive,然後校驗資料,具體如下:
step1:
select count(1),count(distinct sys_code,order_no,hotel_seq) from dw_source.oc_hotel_order where dt='20150530';
結果: 57736688 57656110
說明:sys_code,order_no,hotel_seq 存在重複的,分組不唯一!
推論 select sys_code,order_no,hotel_seq,count(1) from dw_source.oc_hotel_order where dt='20150530' group by sys_code,order_no,hotel_seq having count(1) > 1 應該有個結果集!
step2:
select count(distinct concat(sys_code,order_no,hotel_seq)) from dw_source.oc_hotel_order where dt='20150530';
結果: 57656110
說明: 二次驗證 step1
step3
select count(1) from
(
select sys_code,order_no,hotel_seq,count(1) from dw_source.oc_hotel_order where dt='20150530' group by sys_code,order_no,hotel_seq having count(1) > 1
) t;
結果: 0
說明:這說明step1的推論不成立
如果推論不成立,就說明 sys_code,order_no,hotel_seq 不應該存在重複的,和step1的結論又矛盾。
這是為什麼???
猜了N久是什麼原因,也試了很多方法測。
最後發現是空值 NULL 造成的問題,然後試了一把
create table temp.test_distinct
as
select sys_code,order_no,hotel_seq
from dw_source.oc_hotel_order
where dt='20150530'
and hotel_seq is null
limit 10;
hive> select * from temp.test_distinct;
OK
1001 1337418073974 NULL
1001 1322452118 NULL
1001 1321665107 NULL
1001 1320940345 NULL
1001 1320654060 NULL
1001 1320091070 NULL
1001 100152004170 NULL
1001 100148616269 NULL
1001 100141108024 NULL
1001 100136889859 NULL
select count(1),count(distinct sys_code,order_no,hotel_seq) from temp.test_distinct;
Total MapReduce CPU Time Spent: 2 seconds 620 msec
OK
10 0
尼瑪,果然奇蹟粗線了!!! count(distinct sys_code,order_no,hotel_seq) 為 0 有木有!
最後佐證一下:
select count(1) from dw_source.oc_hotel_order where dt='20150530' and hotel_seq is null;
Total MapReduce CPU Time Spent: 4 minutes 14 seconds 350 msec
OK
57656110 + 80578 = 57736688 完全吻合
step1:
select count(1),count(distinct sys_code,order_no,hotel_seq) from dw_source.oc_hotel_order where dt='20150530';
結果: 57736688 57656110
說明:sys_code,order_no,hotel_seq 存在重複的,分組不唯一!
推論 select sys_code,order_no,hotel_seq,count(1) from dw_source.oc_hotel_order where dt='20150530' group by sys_code,order_no,hotel_seq having count(1) > 1 應該有個結果集!
step2:
select count(distinct concat(sys_code,order_no,hotel_seq)) from dw_source.oc_hotel_order where dt='20150530';
結果: 57656110
說明: 二次驗證 step1
step3
select count(1) from
(
select sys_code,order_no,hotel_seq,count(1) from dw_source.oc_hotel_order where dt='20150530' group by sys_code,order_no,hotel_seq having count(1) > 1
) t;
結果: 0
說明:這說明step1的推論不成立
如果推論不成立,就說明 sys_code,order_no,hotel_seq 不應該存在重複的,和step1的結論又矛盾。
這是為什麼???
猜了N久是什麼原因,也試了很多方法測。
最後發現是空值 NULL 造成的問題,然後試了一把
create table temp.test_distinct
as
select sys_code,order_no,hotel_seq
from dw_source.oc_hotel_order
where dt='20150530'
and hotel_seq is null
limit 10;
hive> select * from temp.test_distinct;
OK
1001 1337418073974 NULL
1001 1322452118 NULL
1001 1321665107 NULL
1001 1320940345 NULL
1001 1320654060 NULL
1001 1320091070 NULL
1001 100152004170 NULL
1001 100148616269 NULL
1001 100141108024 NULL
1001 100136889859 NULL
select count(1),count(distinct sys_code,order_no,hotel_seq) from temp.test_distinct;
Total MapReduce CPU Time Spent: 2 seconds 620 msec
OK
10 0
尼瑪,果然奇蹟粗線了!!! count(distinct sys_code,order_no,hotel_seq) 為 0 有木有!
最後佐證一下:
select count(1) from dw_source.oc_hotel_order where dt='20150530' and hotel_seq is null;
Total MapReduce CPU Time Spent: 4 minutes 14 seconds 350 msec
OK
57656110 + 80578 = 57736688 完全吻合
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28929558/viewspace-1678913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL null值儲存,null效能影響MySqlNull
- hive中的null值HiveNull
- hive nullHiveNull
- 再說索引與Null值對於Hints及執行計劃的影響索引Null
- NOT IN子查詢中出現NULL值對結果的影響你注意到了嗎Null
- 資料列not null對索引影響一例Null索引
- not-null約束對執行計劃的影響Null
- 【NULL】Oracle null值介紹NullOracle
- margin為負值對佈局的影響
- NULL 值與索引Null索引
- offsetTop屬性值不受padding的影響padding
- 不再迷惑,無值和 NULL 值Null
- NULL 值與索引(二)Null索引
- null(空值)小結Null
- case when遇上null值Null
- 香港伺服器ping值受哪些因素影響伺服器
- Nginx接收的host值會影響alias的規則匹配Nginx
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- SQL中的空值NULLSQLNull
- SQL server中的NULL值SQLServerNull
- 牛火火:淺談大資料的價值與影響大資料
- SQL 查詢中的 NULL 值SQLNull
- 去除陣列中的 null 值陣列Null
- 替換NULL值幫助文件Null
- 查詢中空值null的查理Null
- 遊戲策劃是如何用數值來影響玩家體驗的?遊戲
- “影響者研究”系列(一):社會網路化時代影響者對營銷創新的影響
- 談談資料資產融資的價值影響和實現路徑
- 資料庫系統 空值 null資料庫Null
- PostgreSQL排序把null值排在後面SQL排序Null
- mysql中null與“空值”的坑MySqlNull
- 如何在es中查詢null值Null
- not in 中包含null值是個悲劇Null
- MySQL裡null與空值的辨析MySqlNull
- 頭疼的null值,自敬彬Null
- 關於null值的小知識Null
- 資料庫聚簇索引——not null條件對唯一鍵索引成為聚簇索引的影響資料庫索引Null
- Mybatis出現成員賦值都是null或者預設值MyBatis賦值Null