如何通过另一列的键访问Redshift的Super类型列?
Redshift Super类型列通过动态键访问的方法
是的,你可以直接通过Super字段完成动态键的访问,不需要先序列化再用JSON函数处理。Redshift的Super类型支持方括号[]语法来动态引用来自另一列的键,替代你尝试的super_field.{super_key}写法。
正确的SQL示例
with temp as (select json_parse('{"aaa":{"1":2}}') as super_field, 'aaa'::text as super_key) select super_field, super_key, json_extract_path_text(json_serialize(super_field), super_key) as extracted_text_old, super_field[super_key] as extracted_text_new -- 直接用方括号访问动态键 from temp;
说明
- 对于Super类型的静态键,你可以用
.语法(比如super_field.aaa); - 当键来自另一列的变量时,必须使用
[]语法,将键列作为参数传入方括号中,这样就能直接从Super对象中提取对应的值,而且性能比序列化后再处理更优,因为减少了JSON格式转换的额外开销。
内容的提问来源于stack exchange,提问作者Lex Looter
相关产品推荐
相关产品推荐

