Amazon Redshift中如何用SQL regex提取JSON字段的Material属性值
方案1:使用Redshift原生JSON函数(优先推荐)
你存储的attributes字段是标准JSON格式,用Redshift自带的JSON解析函数处理比正则更稳定,不受JSON键顺序、空格变化影响:
-- 仅返回存在Material属性的行 SELECT JSON_EXTRACT_PATH_TEXT(elem, 'value') AS material_value FROM 你的表名, UNNEST(JSON_PARSE(attributes)) AS elem WHERE JSON_EXTRACT_PATH_TEXT(elem, 'name') = 'Material'
如果需要保留所有行,没有Material属性的行返回NULL,改用左连接写法:
SELECT JSON_EXTRACT_PATH_TEXT(elem, 'value') AS material_value FROM 你的表名 LEFT JOIN UNNEST(JSON_PARSE(attributes)) AS elem ON JSON_EXTRACT_PATH_TEXT(elem, 'name') = 'Material'
方案2:正则提取方案
如果必须用正则实现,可以用带捕获组的正则搭配Redshift REGEXP_SUBSTR的e参数提取目标值:
SELECT REGEXP_SUBSTR(attributes, '"name": "Material", "value": "([^"]+)"', 1, 1, 'e') AS material_value FROM 你的表名
正则逻辑说明:
- 先精准匹配
"name": "Material", "value": "固定前缀 - 捕获组
([^"]+)匹配所有非双引号的字符,就是Material对应的value值 - 最后的
'e'参数指定返回第一个捕获组的内容,而非整段匹配的字符串
内容的提问来源于stack exchange,提问作者Sluna
相关产品推荐
相关产品推荐

