如何在Grafana中使用KQL提取子串特定内容生成对应列
KQL 按标识提取长字符串内指定片段生成独立列实现方案
核心使用KQL内置的extract()正则提取函数实现,无需逐位切割字符串,可直接忽略所有冗余内容匹配目标值,适配Azure导入数据表的场景。
匹配逻辑说明
原始字符串遵循「目标数字被单引号包裹 + 任意长度冗余内容 + 固定标识短语被单引号包裹」的结构,针对parent、successor两个标识分别写正则规则即可:
- 提取parent对应值:匹配单引号包裹的连续数字,跳过后续任意非单引号的冗余字符,直到匹配到
'parent'标识,捕获该数字即为目标值 - 提取successor对应值:逻辑同上,将匹配的终点标识替换为
'successor'即可
可直接复用的代码
假设存储原始超长字符串的列名为RawContent,替换为实际的表名、原始列名即可使用:
// 替换为从Azure导入的实际表名 YourImportedAzureTable | extend // 提取parent列,转成数值类型,不需要数值格式可去掉外层tolong() parent = tolong(extract(@"'([0-9]+)'[^']*'parent'", 1, RawContent)), // 提取successor列 successor = tolong(extract(@"'([0-9]+)'[^']*'successor'", 1, RawContent)) // 仅保留需要的两列输出,和预期表结构一致 | project parent, successor
代码参数说明
@前缀:标记KQL原义字符串,避免正则特殊字符重复转义,降低写错概率extract()第二个参数1:表示取正则中第一个英文括号包裹的捕获分组内容,也就是需要的纯数字片段[^']*:匹配任意长度的非单引号字符,刚好对应两个单引号片段之间的所有冗余内容,不管冗余内容是符号、字母、空格都能跳过
适配调整提示
如果实际数据里数字和标识的顺序反过来(即标识在前、目标数字在后),只需要把正则调整为'parent'[^']*'([0-9]+)'格式即可,逻辑为:先匹配固定标识,跳过中间冗余内容,捕获后面单引号包裹的数字。
内容的提问来源于stack exchange,提问作者Hudson Carpenter
相关产品推荐
相关产品推荐

