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

 

posted @ 2023-08-11 15:11  酷酷的狐狸  阅读(339)  评论(0编辑  收藏  举报