首页 > Web开发 > 详细

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

时间:2021-09-07 07:47:51      阅读:23      评论:0      收藏:0      [点我收藏+]

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

结果:
技术分享图片

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

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

Jq 和 Path 对比

先看看Jq的效果
技术分享图片

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

表达式:

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

结果如图所示:
技术分享图片

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

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

结论不言而喻。

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

原文:https://www.cnblogs.com/slankka/p/15233017.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!