hive數據類型檢查


當下hadoop和其他NoSQL數據庫為什么如此流行的一個原因是他們采用的是schema on read策略,而非傳統關系型數據庫的schema on write。傳統的數據庫嚴格要求數據的schema。數據的列數,每列的字段類型在創建開始都嚴格規定,因此,你需要時刻按照數據的格式來存儲。Hive和其他一些非關系型數據庫事先對數據的格式和具體內容並不關心,只有當數據被讀出的時候才會應用schema。這樣帶來的好處是你實現可以先存儲你的數據,直到當你要分析你數據時再靈活指定需要的schema。

那么當hive中出現數據類型不對時會出現什么狀況?

hive數據類型

基本數據類型:tinyint, smallint, int,bigint, boolean, float, double, string

復雜數據類型:struct,map,array

hive對數據類型的檢查

數據導入時不進行類型檢查,不支持schema on write

數據讀取時會進行類型檢查,支持schema on read,

如果類型異常,會將字段復制為NULL

hive> select * from hequn_xxx;
OK
521460020740	9787506042946 
521460020939	9787506043946
521460020954	9787517026686
521460021042	4324234324324
521460021271	9787511023681
	NULL
	NULL
521460021908	321432
521460022134	3123412312
521460022166	7544012476

我們又改如何進行處理呢?如果不處理數據流向下游可能造成問題的延伸,這樣當問題出現時不利於查找問題的根源。所以讀取數據的時候需要對數據進行檢查。

1.將null賦為其他值。

case when aid is null then cast('111' as bigint) else aid end

2.遇到null時直接退出。hive的內建函數assert_true()當條件為false時會拋出異常。

assert_true(aid is not null)

3.對於更復雜的格式檢查可以通過自定義UDF來檢查。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM