问题
从mysql中抽取数据到hive中发现数据错乱了,mysql中的两百条数据抽到hive中变成了九千多条。初步怀疑是建表时的分割符问题,更换行分隔符和列分割符都无法解决问题。后面查看mysql中数据,发现有个字段中包含大量换行符、制表符、回车等,问题找到了,开始解决
解决
Hive数据处理中去除字段中的换行符、分割符需要使用regexp_replace()函数
具体使用方式如下:
regexp_replace(字段,需要替换的符号,替换符号)
举例:
mysql数据:
test表中字段field_B中含有换行符等符号,需要在抽取时进行处理
field_A | field_B | field_C |
---|---|---|
aaa | \t\n\001\bxxx | aaa |
bbb | \t\n\001\bxxx | bbb |
ccc | \t\n\001\bxxx | bbb |
hive建表语句:
create table if not exists test(
field_A string,
field_B string,
field_C string)
partitioned by (date timestamp)
row format delimited fields terminated by ',';
抽取语句:
insert overwrite table partition (date = current_date())
select
field_A,
regexp_replace(field_B,'\\n|\\t|\\r',''),
field_C
from test