2017-07-26 15 views
3

我想清理unicode Hive表中的數據。以下是數據,在Hive中查詢時刪除Unicode字符

select ('http://10.0.0.1/���m��v������)�a�^�����kn:4�+9x�2c��m�{��') 

我需要的輸出是查找是否有任何unicode字符在我的列中,並將其刪除。此處的輸出應爲:

http://10.0.0.1/ 

或完全爲空。他們中的任何一個都很好。如果一行包含任何unicode字符,則可以將其完全填充爲空。

以下是我tryings,

select REGEXP_REPLACE('http://10.0.0.1/���m��v������)�a�^�����kn:4�+9x�2c��m�{��', '\\[[:xdigit:]]{4}', '') 

select REGEXP_REPLACE('http://10.0.0.1/���m��v������)�a�^�����kn:4�+9x�2c��m�{��', '[||chr(128)||'-'||chr(255)||]', '') 

Executed as Single statement. Failed [40000 : 42000] Error while compiling statement: FAILED: ParseException line 1:193 mismatched input '<EOF>' expecting) near ')' in function specification 
Elapsed time = 00:00:00.220 

STATEMENT 1: SELECT Statement failed. 

有人可以幫我在我的桌子清理這些?

感謝

編輯:

鄰居其中工作,

select REGEXP_REPLACE('"http://r.rxthdr.com/w?i=s�F�""�HY|�K�>�0����D����W8뤒�O0�Q�D�1��Vc~�j[Q��f��{u�Be�S>n���Ò���&��F9���C�i��8:Ú」�[email protected]ĪO��K?�Ēc�6��=��v[�����D�$%��:�a�40ݩ�&O��K��""�0�a<x��TcX���b��TN�}�x�o��UY$K�I�Օ""��(+�M���E�=K�A�I�A���q#l�(�yt�5��h}��~[��YOA��G�=ïˆï¿½{���. �Q���ح;x=�s�0:�', '(?s).*\\P{ASCII}.*', '') 

地方它不工作,

select REGEXP_REPLACE('c4k0j,}W""d+2|4y0hkCkRh+.{pq80{?X8O>b<:ph.3!{T', '(?s).*\\P{ASCII}.*', '') 

select REGEXP_REPLACE('z|""},}69]6N2|c_;5.su={IU+|8ubq1<r$!Xxy#?Bhkv20:jXNgRh+5fwj:ndfWBJ}e)>','(?s).*\\P{ASCII}.*', '') 

圖像中的第一個具有unicode字符。但是,粘貼它成爲一個點。

enter image description here

能否請你幫我做這個?

+1

儘量選擇''REGEXP_REPLACE到( '...', '' '\\ p {ASCII} *'。)從第一個找到的非ASCII字符中刪除所有字符串。 –

+0

@WiktorStribiżew謝謝。有用 ! – haimen

+0

@WiktorStribiżew你想發佈它作爲答案嗎? – haimen

回答

3

您可以使用

select REGEXP_REPLACE(YOUR_STRING_HERE, '\\P{ASCII}.*', '') 

它會從第一個發現的非ASCII字符刪除所有字符串,最多到結束。

Hive正則表達式支持Unicode屬性類,\p{ASCII}匹配任何ASCII字符。通過將p轉換爲大寫形成相反的Unicode屬性類。所以,\P{ASCII}匹配任何不是ASCII的字符。 .*儘可能匹配任何0+字符,因爲*貪婪量詞。

請注意,.默認情況下不符合換行符。如果您需要刪除換行符,在模式的開始添加(?s)

'(?s)\\P{ASCII}.*' 
+1

非常感謝!它的工作原理:) – haimen

+0

@haimen我還添加了一個小的解釋和調整選項。 –

+0

select REGEXP_REPLACE('z |「」},} 69] 6N2 | c_; 5.su = {IU + | 8ubq1 ','(?s )\\ P {ASCII}。*','')他以下不起作用。你能幫我解決這個問題嗎? – haimen