hive 資料倉庫過濾 非法字元,不可見字元,亂碼
阿新 • • 發佈:2019-01-04
接收到伺服器端傳回來的資料以後,入到了hive表當中,發現一些url 的傳參是亂碼的。這時候,需要進行過濾。
例如:
select uri from table limit 10;
在ascii 碼錶中,可見字元的範圍是:32~126
利用這個思路,在寫sql的時候步驟如下:
1、將url進行切割 例如:
new-project?email-verification=true---> 切割成 tocharArray形式
2、對陣列進行排序:
這裡有三個小地方要注意
a. split的"" 預設是切割每個字元返回一個數組。
b. 切割後,有"" 這個總是有的。
c. 排序是按照ascii 碼來排序的
3、分別獲取最大和最小的 那個元素 "" 除外
sort_array(xxx)[length(uri)-1]
sort_array(xxx)[1]
4、 利用ascii 函式進行 解析字元,判斷在 between 32 and 126 之間
最後
一句sql
select uri from table where yyyymmdd between '20181201' and '20181203' and ascii(sort_array((split(uri,'')))[1]) between 32 and 126 and ascii(sort_array((split(uri,'')))[length(uri)-1]) between 32 and 126
反正我不太好使,結果仍然有一些亂碼,我又加了一句
select uri from table where yyyymmdd between '20181201' and '20181203'
and ascii(sort_array((split(uri,'')))[1]) between 32 and 126
and ascii(sort_array((split(uri,'')))[length(uri)-1]) between 32 and 126
and ascii(sort_array((split(uri,'')))[length(uri)-1]) > 0
基本過濾了 99%的 髒 字串了。 剩下的 1% ,沒辦法了。。
如果本文幫助了您,請點個贊。謝謝
有一些優化的瑕疵,可與留言,