Hive中多字符做分隔符
场景:
源表table_a和结果表table_b的分隔符都是'|=|',其中结果表table_b为通过方式 row format delimited fields terminated by '|=|' NULL DEFINED AS '' 指定分隔符创建。
insert overwrite table table_b select 'wap' as source, split(ip,',')[0] as ip, wpath, -- 该字段内容含有字符'|' split(wpath,'\\?')[0] as url, qtime from table_a where substr(qtime, 1, 10) = '2021-02-06';
由于源表table_a中的字段wpath内容含有字符'|',导致入到结果表table_b中的数据发生了错位,从而数据不准确。具体表现为:源表table_a的字段wpath='xxx|yyy',入到结果表table_b后,结果表table_b的wpath='xxx',url='yyy'的错位情况。
解决:
创建结果表table_b的时候通过方式 row format serde 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' with serdeproperties("field.delim"="|=|") 指定分隔符即可解决以上问题。

浙公网安备 33010602011771号