1. 程式人生 > >Hive正則表示式對資料過濾

Hive正則表示式對資料過濾

正在做的一個專案中,由於資料量比較大,所以資料的內容比較亂,比如說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}