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"="|=|") 指定分隔符即可解决以上问题。

posted @ 2021-02-07 17:10  是江英呀~  阅读(417)  评论(0)    收藏  举报