如何在Druid摄入规范中正确编写regexp_extract?
解决Druid摄入规范中regexp_extract正则转义问题
问题根源在于JSON配置的转义层级:查询语句中的正则直接在SQL环境执行,转义规则简单;但摄入规范是JSON格式,字符串中的反斜杠、双引号需要额外转义,否则会导致语法错误或匹配失败。
方法一:修正正则的转义格式
需要对正则中的每个特殊字符进行双重转义:
- 正则里的双引号
"需转义为\\\\\"(JSON解析后还原为正则所需的") - 正则里的
\d需转义为\\\\d(JSON解析后还原为正则所需的\d)
正确的transformSpec配置如下:
"transformSpec": { "filter": null, "transforms": [ { "type": "expression", "name": "ID", "expression": "regexp_extract(input, '(?<=\\\\\"ID\\\\\":\\\\\")(\\\\d+)(?=\\\\\",)', 0)" } ] }
方法二:使用JSON提取函数更可靠
由于你的输入是标准JSON格式字符串,推荐直接使用Druid内置的json_extract_scalar函数提取字段,完全避免正则转义的麻烦,且匹配更稳定:
"transformSpec": { "filter": null, "transforms": [ { "type": "expression", "name": "ID", "expression": "json_extract_scalar(input, '$.ID')" } ] }
内容的提问来源于stack exchange,提问作者user12331
相关产品推荐
相关产品推荐

