【Apache Druid】总结jq和JsonPath在处理JSON转换的一个技巧

Apache Druid Jq Expression

先看一个Apache Druid Digest Spec的ioConfig部分:

{
    "topic": "cr_slankka_internal_metric",
    "inputFormat": {
      "type": "json",
      "flattenSpec": {
        "useFieldDiscovery": true,
        "fields": [
          {
            "type": "jq",
            "name": "vcpu",
            "expr": ".[\"metrics\"] | from_entries | .vcpu | tonumber"
          },
          {
            "type": "jq",
            "name": "vmem",
            "expr": ".[\"metrics\"] | from_entries | .vmem | tonumber"
          }
        ]
      },
      "featureSpec": {}
    }
}

打开
jQ play

输入

{
    "metrics": [
        {
            "name": "vcpu",
            "value": "10240"
        },
        {
            "name": "vmem",
            "value": "327680"
        }
    ]
}

输入Filter:

.["metrics"] | from_entries | .vcpu | tonumber

或者

.["metrics"] | from_entries | .vmem | tonumber

结果:
Jq Play

这样的话,可以把一个structured nested JSON 提取出flattened的metric。

说人话就是JSON提取指标字段值。

Jq 和 Path 对比

先看看Jq的效果
Apache Druid

Path的表达式也能提取,但是缺点就是转换出来的仍旧是原来的类型,因为为了表示原始精度,指标采用了字符串表示。不仅如此,转换出来的永远是一个数组。

表达式:

$.metrics.[?(@.name == 'vcpu')].value

结果如图所示:
JsonPath

这种情况就是Druid无法将这个Flatten列识别为一个long类型的Metric或者Dimension,转换也做不到。(以我目前尝试的结果来看)

佐证 getting-a-single-value-from-a-json-object-using-jsonpath

结论不言而喻。

posted @   一杯半盏  阅读(366)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示