hai*_*men 4 regex sql unicode hadoop hive
我想清理unicode Hive表中的数据.以下是数据,
select ('http://10.0.0.1/���m��v������)�a�^�����kn:4�+9x�2c��m�{��')
Run Code Online (Sandbox Code Playgroud)
我需要的输出是查找我的列中是否有任何unicode字符并将其删除.这里的输出应该是,
http://10.0.0.1/
Run Code Online (Sandbox Code Playgroud)
或完全无效.他们中的任何一个都没问题.如果一行包含任何unicode字符,则可以将其完全设为null.
以下是我的尝试,
select REGEXP_REPLACE('http://10.0.0.1/���m��v������)�a�^�����kn:4�+9x�2c��m�{��', '\\[[:xdigit:]]{4}', '')
Run Code Online (Sandbox Code Playgroud)
和
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.
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我在桌子上清洁这些吗?
谢谢
编辑:
工作的地方,
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:ڔ�_@Ī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}.*', '')
Run Code Online (Sandbox Code Playgroud)
它不工作的地方,
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}.*', '')
Run Code Online (Sandbox Code Playgroud)
图像中的第一个具有unicode字符.但是,粘贴它成为一个点.
你能帮我做这个吗?
你可以用
select REGEXP_REPLACE(YOUR_STRING_HERE, '\\P{ASCII}.*', '')
Run Code Online (Sandbox Code Playgroud)
它将从第一个找到的非ASCII字符中删除所有字符串.
Hive正则表达式支持Unicode属性类,并\p{ASCII}
匹配任何ASCII字符.通过转换p
为大写形成相反的Unicode属性类.因此,\P{ASCII}
匹配任何非ASCII的字符..*
尽可能多地匹配任何0+字符,就像*
一个贪婪的量词.
请注意,.
默认情况下与换行符不匹配.如果您需要删除换行符,请(?s)
在模式的开头添加:
'(?s)\\P{ASCII}.*'
Run Code Online (Sandbox Code Playgroud)