Redshift SUPER类型无法提取驼峰键chainId值的解决求助
解决方案:Redshift SUPER类型驼峰键
chainId提取问题 问题根源
Redshift处理SUPER字段的点符号访问时,会自动将标识符转为全小写。你的JSON键是驼峰式的chainId,直接用properties.chainId会尝试匹配全小写的chainid键,自然返回null;而非驼峰键因为大小写一致,所以能正常提取。
可行方案
方案1:方括号+精确键名直接访问(推荐)
无需序列化整个JSON,直接通过键名精准访问SUPER结构中的值,适配大型JSON:
SELECT chainId, properties['chainId']::BIGINT AS extracted_chainId FROM your_table;
注意键名必须严格匹配驼峰格式('chainId'),大小写不能错。
方案2:PartiSQL键值对遍历提取
遍历SUPER对象的键值对,精准匹配目标键名,同样无需序列化大JSON:
SELECT chainId, (SELECT CAST(value AS BIGINT) FROM properties AS p WHERE p.key = 'chainId') AS extracted_chainId FROM your_table;
这种方式通过遍历对象的每个键值对,找到完全匹配chainId的键后提取值,彻底避免大小写转换问题。
方案3:JSON_EXTRACT_PATH_TEXT(备选,仅适用于可序列化的JSON)
如果你的JSON未超出Redshift序列化限制,可使用该函数,同样要严格匹配键名:
SELECT chainId, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(properties), 'chainId')::BIGINT AS extracted_chainId FROM your_table;
但此方法不适合无法序列化的超大JSON,优先选用前两种方案。
内容的提问来源于stack exchange,提问作者thleo
相关产品推荐
相关产品推荐

