在Hive中如果要将JSON格式的数据拆解成2列多行,可以通过使用Lateral View Explode来实现。
-- 创建临时表并插入JSON数据
CREATE TABLE temp_table (json_string STRING);
INSERT INTO temp_table VALUES('{"sa016804":"门店选择","ncf76803":"员工选择","z9ab4ba3":"12月11日","w27b0c03":"12月12日","n7b6d522":"12月13日","s2becb28":"12月14日","fce40896":"12月15日","n57 ca4af":"12月16日","q34460fe":"12月17日","y0ef63e5":"岗位","z1320d43":"姓名","nb7b 1e49":"手机号"}');
-- 解析JSON数据
SELECT explode(map_keys(json_data)) as key, explode(map_values(json_data)) as value
FROM (
SELECT map(
split(json_string, '[:,]')[0],
split(json_string, '[:,]')[1],
split(json_string, '[:,]')[2],
split(json_string, '[:,]')[3],
split(json_string, '[:,]')[4],
split(json_string, '[:,]')[5],
split(json_string, '[:,]')[6],
split(json_string, '[:,]')[7],
split(json_string, '[:,]')[8],
split(json_string, '[:,]')[9],
split(json_string, '[:,]')[10],
split(json_string, '[:,]')[11]
) as json_data
FROM temp_table
) t;
上述代码将JSON数据解析成了两列多行。输出结果为:
key value
---------------
sa016804 门店选择
ncf76803 员工选择
z9ab4ba3 12月11日
w27b0c03 12月12日
n7b6d522 12月13日
s2becb28 12月14日
fce40896 12月15日
n57 ca4af 12月16日
q34460fe 12月17日
y0ef63e5 岗位
z1320d43 姓名
nb7b 1e49 手机号