个人博客,记录知识防止遗忘
hive和mysql中的字符替换、正则匹配
hive和mysql中的字符替换、正则匹配

hive和mysql中的字符替换、正则匹配

mysql中有个函数 replace ,可以将指定内容中的某字符替换为另一字符
hive中对应的函数为 regexp_replace
此外mysql和hive都可以使用like、regexp来进行条件匹配

内容大纲

1    select字段中直接替换

1.1    替换字段中的英文逗号为中文逗号

SELECT
    concat( '\"', REPLACE ( a, ',', ',' ), '\"' ) AS c,
    concat( '\"', REPLACE ( b, ',', ',' ), '\"' ) AS d 
FROM
    ( SELECT 'aaa,111' AS a, 'bbb,222' AS b ) t

image.png

# 常用替换语句
concat('\"',regexp_replace(content,',',','),'\"')   -- hive
concat('\"',replace(content,',',','),'\"')          -- mysql

1.2    删除字段中的换行回车

image.png
上图命令:

replace(replace(content,CHAR(10),''),CHAR(13),'')  -- mysql,去除换行和回车

关于char()代表的意思:
在任意编辑器 (包含vim) 中,ALT+小键盘数字可以看效果
如:ALT+10 松开ALT 可以看到换行效果

1.3    综合上述,先替换英文逗号,再删除回车换行

concat('\"',regexp_replace(content,',',','),'\"')   -- hive,替换英文逗号,字段首末加双引号
concat('\"',replace(content,',',','),'\"')       -- mysql,替换英文逗号,字段首末加双引号
replace(replace(content,CHAR(10),''),CHAR(13),'')  -- mysql,去除换行和回车
# 组合后如下

# mysql语句中 ,替换英文逗号,字段首末加双引号,再去除换行和回车
replace(replace(concat('\"',replace(content,',',','),'\"'),CHAR(10),''),CHAR(13),'')  

# hive语句中,替换英文逗号,字段首末加双引号,再去除换行和回车
regexp_replace(regexp_replace(concat('\"',regexp_replace(content,',',','),'\"'),CHAR(10),''),CHAR(13),'')  

2    where条件中正则模糊匹配

2.1    like查询

mysql 和 hive 都可以使用like模糊匹配,like使用很简单,只需要用百分号 % 替换掉不重要的部分即可,例如:
image.png
此外还可以使用 not like 进行取反判断,例如:
image.png

但有时候like不能完全满足我们的需求, 例如一些多值、不易列举的要求
这时候就需要使用更加强大的正则表达式来进行匹配了

2.2    正则匹配

myql 和hive都可以使用regexp 来执行正则匹配 ,可以更方便的筛选出所需数据
image.png
如果这个用not like来实现的话,就得整理出所有包含“0”的8位数,并将其通过and语句依次not like,这显然是不可能的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注