Hive正則表示式對資料過濾
阿新 • • 發佈:2019-02-07
正在做的一個專案中,由於資料量比較大,所以資料的內容比較亂,比如說mac地址,這個地址有的資料中存在,有的資料中不存在,當通過hive進行匯出資料的時候,如果存在些非法的型別的資料會造成NoSuchElement異常,經過幾天的排查與摸索,終於將該隱患排除。
在hive中如果某些欄位,尤其是中間的部分欄位是空的值的話,很容易出錯,在資料量十分大的情況下甚至於很難去查詢到這種比較特殊的情況。
如圖所示是部分的資料,當然為了安全起見只是截取了一點點,能夠反映其特徵即可,最頂部的資料可以看到是空值的連續串,甚至還出現了0和-1的值,在MAC地址中這種值應該是錯誤的值,需要將其從眾多的資料中剔除掉,否則會對系統帶來安全隱患。
由於資料為MAC地址,所以其格式比較統一,開始是通過判斷是不是空來進行剔除,但是後來發現並不是想象的那麼簡單,有的值多個不是空但是也不是不符合的。
採用正則表示式去匹配,這樣更加方便的剔除髒資料了。
select
*
from data
where
macaddress regexp "([0-9a-fA-F]{2}){6}"
如果中間存在:的話就改為:
[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}