1. 程式人生 > >hive 資料倉庫過濾 非法字元,不可見字元,亂碼

hive 資料倉庫過濾 非法字元,不可見字元,亂碼

接收到伺服器端傳回來的資料以後,入到了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% ,沒辦法了。。

如果本文幫助了您,請點個贊。謝謝

有一些優化的瑕疵,可與留言,