日志服务数据加工: JMES语法介绍

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 日志服务数据加工: 介绍数据加工用到的JMES的语法

概述

JMES是一个增强型的JSON查询计算语言, 不仅可以用于对JSON数据进行抽取, 还可以做计算与转换。关于JMES的语法详细介绍可以参考JMES Tutorial

数据加工中的json_select函数和e_json函数支持以JMES语法对(字段或表达式表示JSON的)值提取或计算特定值。其用法为

json_select(字段, "jmes表达式", default=None, restrict=False)
e_json(字段, jmes="jmes表达式", ...)

关于这两个函数的具体用法,可参考json_select函数e_json函数


本文介绍JMES常用语法。

通过key来获取值

原始日志

"json_data":{
   "a": "foo",
   "b": "bar",
   "c": "baz"
 }

jmes语法

json_select(v("json_data"), "a") #返回值 foo
json_select(v("json_data"), "b") #返回值 bar
json_select(v("json_data"), "c") # 返回值 baz

通过层级访问来获取值

原始日志

"json_data":{"a": 
                            {"b":
                                 {"c":
                                  {"d":"value"}
                            }
                        }
                 }

jmes语法

json_select(v("json_data"), "a.b.c.d") # 返回值 value

通过索引来获取值

通过索引访问主要用于json中的数组数据

原始日志

"json_data":{
   "a": ["b", "c", "d", "e", "f"]
 }

jmes语法

json_select(v("json_data"), "a[2]") # 返回值 d

通过切片操作获取值

对于json中的数组数据还可以使用切片操作

原始日志

"json_data":{
   "a": ["b", "c", "d", "e", "f"]
 }

jmes语法

json_select(v("json_data"), "a[2: ]") # 返回值 ["d", "e", "f"]

多种用法综合使用

原始日志

"json_data":{
  "a": {
      "b": {
          "c": [{"d": [0, [1, 2]]}, {"d": [3, 4]}]
        }
  }
}

jmes语法

json_select(v("json_data"), "a.b.c[0].d[1][0]") # 返回值 1

通过投影来获取值

原始日志1

"json_data":{
        "people": [
          {"first": "James", "last": "d"},
          {"first": "Jacob", "last": "e"},
          {"first": "Jayden", "last": "f"},
          {"missing": "different"}
        ],
        "foo": {"bar": "baz"}
}

jmes语法

json_select(v("json_data"), "people[*].first") # 返回值 ["James","Jacob","Jayden"]

原始日志2

"json_data":{
      "ops": {
        "functionA": {"numArgs": 2},
        "functionB": {"numArgs": 3},
        "functionC": {"variadic": true}
      }
    }

jmes语法

json_select(v("json_data"), "ops.*.numArgs") # 返回值 [2, 3]

原始日志3

"json_data":{
    "machines": [
      {"name": "a", "state": "running"},
      {"name": "b", "state": "stopped"},
      {"name": "c", "state": "running"}
    ]
}

jmes语法

json_select(v("json_data"), "machines[?state=='running'].name") # 返回值 ["a", "c"]

多值选取

原始日志

"json_data":{
    "people": [
      {
        "name": "a",
        "state": {"name": "up"}
      },
      {
        "name": "b",
        "state": {"name": "down"}
      }
    ]
}

jmes语法

json_select(v("json_data"), "people[].[name, state.name]") # 返回值[["a","up"],["b","down"]]

计算数组长度

对于json中的数组数据,jmes语法支持数组长度的计算

原始日志

"json_data":{
   "a": ["b", "c", "d", "e", "f"]
 }

jmes语法

json_select(v("json_data"), "length(a)") # 返回值 5
# length(a) > 0, 设置"no-empty"字段为true
e_if(json_select(v("json_data"), "length(a)", default=0), e_set("no-empty", true))

更多关于JMES的语法参考JMES Tutorial

进一步参考

欢迎扫码加入官方钉钉群获得实时更新与阿里云工程师的及时直接的支持:
image

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
13天前
|
存储 数据采集 JavaScript
深入理解数仓开发(一)数据技术篇之日志采集
深入理解数仓开发(一)数据技术篇之日志采集
|
1月前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第9天】mongoDB查看数据的插入日志
321 4
|
1月前
|
存储 监控 数据可视化
无需重新学习,使用 Kibana 查询/可视化 SLS 数据
本文演示了使用 Kibana 连接 SLS ES 兼容接口进行查询和分析的方法。
66630 11
|
1月前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第2天】mongoDB查看数据的插入日志
328 0
|
1月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之从Oracle数据库同步数据时,checkpoint恢复后无法捕获到任务暂停期间的变更日志,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
18天前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
18 2
|
30天前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第22天】mongoDB查看数据的插入日志
30 3
|
1月前
|
SQL 关系型数据库 数据库
实时计算 Flink版产品使用合集之同步PostgreSQL数据时,WAL 日志无限增长,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用合集之是否支持从库归档日志捕获数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
关系型数据库 MySQL 数据管理
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
222 0

相关产品

  • 日志服务