Hive查询不包含a-z0-9a-z,&-"#/;以外的字符数据

doinxwow  于 2021-04-08  发布在  Hive
关注(0)|答案(2)|浏览(1081)

我想写一个通过shell脚本执行的hql查询。查询的主要目的是数据不应包含除a-z、0-9、空格以外的任何字符,以及除逗号、安培、破折号、@ #/分号、冒号以外的特殊字符。
请找到我用来实现我的要求的查询,虽然我不是100%成功。

select REGEXP_REPLACE(REGEXP_REPLACE(Name,'[^a-zA-Z \\-\\\']',''),'^[\\-\\\' ]*','')
from source_table

请找到我用来测试的样品。

'Proa$$%%'  
'$%$%&'  
'$*&%$'  
',&-“#/;:$'  
'XYZ.'

预期输出为:

'Proa'  
'&'  
'&'  
',&-“#/;:’'  
'XYZ'
ctzwtxfj

ctzwtxfj1#

试试这个($|/$/|/.|/%|/*)正则表达式。
例子:`

hive> select regexp_replace(name,"(\\$|\\.|\\%|\\*)","") from source_table;

输出。

Proa
&
&
,&-“#/;:
XYZ

上面的查询你可以用hive -e保留在shell脚本中。

hive -e 'select regexp_replace(name,"(\\$|\\.|\\%|\\*)","") from <db_name>.source_table'

更新:

select regexp_replace(name,'[^a-zA-Z0-9\\,\\:\\;\\&\\-\\#\\/]','') from <db_name>.source_table;

输出。

Proa
&
&
,&-#/;:
XYZ
egmofgnx

egmofgnx2#

我对我的脚本做了唯一的修改,就是我在上面加了两个字,而不是"/",请看下面的内容。

select regexp_replace(name,'[^a-zA-Z0-9\\\\,\\\\:\\\\;\\\\&\\\\-\\\\#\\\\/]','') from <db_name>.source_table;

以上代码在我的shell脚本中工作正常。
问题已经解决。

相关问题