Redshift中Copy命令导致Super列值带引号的转换问题
解决Redshift中带引号的Super字符串转换为可操作数组的问题
针对你的需求,Redshift提供了json_parse()函数,可将字符串形式的JSON数组转换为可操作的Super数组类型,具体操作如下:
1. 确认数据类型
先通过typeof()函数验证当前Super字段的实际类型:
select id, typeof(super_field), super_field from test.array_test;
执行后会看到id=2的super_field类型为string,id=3的为array。
2. 即时转换并展开数组
若仅需在查询时转换并展开数组,可直接在查询中用json_parse()解析字符串:
select t.id, t1 from test.array_test t, json_parse(t.super_field) t1 -- 可选:仅处理字符串类型的记录 where typeof(t.super_field) = 'string';
执行该查询后,id=2的记录会被正确展开为数组元素。
3. 永久更新表中数据
若要将表中带引号的字符串永久转换为Super数组类型,执行更新语句即可:
update test.array_test set super_field = json_parse(super_field) where typeof(super_field) = 'string';
更新完成后,原字符串类型的Super值会全部转为数组类型,后续可直接用t.super_field t1的方式展开。
Copy命令优化建议
为避免后续导入时出现同类问题,使用Redshift Copy命令导入Super类型数据时:
- 确保源数据中的JSON数组无额外引号包裹
- 若源数据为JSON格式,在Copy命令中指定
FORMAT AS JSON 'auto',让Redshift自动解析JSON结构为Super类型
内容的提问来源于stack exchange,提问作者dmurray
相关产品推荐
相关产品推荐

