hive处理字符串化数组
大数据在进行ETL过程中,为了避免因为源、目标表字段因为数据类型不一致造成抽数失败,所以在目标表一般都会将字段设置成string类型,后续数据同步过来后再进行类型转换。
以ARRAY类型字段举例:
通过正则将字符串左右两边的中括号[]进行去除 explode(split(REGEXP_REPLACE(colume, '^\\[|\\]$', ''), ",")) 或者 REPLACE(REPLACE(colume, "[", ""), "]", "")
如果源表字段是ARRAY<int>类型的数据,在同步过来后不但外面的中括号被套上了引号'[]',里面的int类型数据也变成了'int'
例如: 源表字段数据: [111, 222, 333] 同步后目标表字段数据: '["111", "222" , "333"]'
正则处理方式
REGEXP_REPLACE(column, '^\\"|\\"$', '')
最终处理方式
select REGEXP_REPLACE(new_column, '^\\"|\\"$', '') as new_column2 from table LATERAL VIEW explode(split(REGEXP_REPLACE("原始字段", '^\\[|\\]$', ''), ",")) c1 as new_column