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

本文涉及的产品
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
文件存储 NAS,50GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
703 57
|
3月前
|
数据采集 运维 监控
不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?
SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。
249 30
|
7月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
本文介绍了阿里集团A+流量分析平台的日志查询优化方案,针对万亿级日志数据的写入与查询挑战,提出基于Flink、Paimon和StarRocks的技术架构。通过Paimon存储日志数据,结合StarRocks高效计算能力,实现秒级查询性能。具体包括分桶表设计、数据缓存优化及文件大小控制等措施,解决高并发、大数据量下的查询效率问题。最终,日志查询耗时从分钟级降至秒级,显著提升业务响应速度,并为未来更低存储成本、更高性能及更多业务场景覆盖奠定基础。
|
4月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
518 1
|
8月前
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
572 117
|
4月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
359 0
|
4月前
|
数据采集 运维 监控
|
6月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
688 4
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
373 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件

相关产品

  • 日志服务