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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
文件存储 NAS,50GB 3个月
简介: 日志服务数据加工: 介绍数据加工用到的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日志并进行多维度分析。
目录
相关文章
|
2月前
|
SQL 运维 监控
SLS 数据加工全面升级,集成 SPL 语法
在系统开发、运维过程中,日志是最重要的信息之一,其最大的优点是简单直接。SLS 数据加工功能旨在解决非结构化的日志数据处理,当前全面升级,集成 SPL 语言、更强的数据处理性能、更优的使用成本。
18068 136
|
7天前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
9天前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
8天前
|
存储 监控 网络协议
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
|
8天前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
13 0
|
12天前
|
Kubernetes 关系型数据库 API
实时计算 Flink版产品使用问题之连接的PG表长时间无数据写入,WAL日志持续增长,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
存储 分布式计算 监控
日志数据投递到MaxCompute最佳实践
日志服务采集到日志后,有时需要将日志投递至MaxCompute的表中进行存储与分析。本文主要向用户介绍将数据投递到MaxCompute完整流程,方便用户快速实现数据投递至MaxCompute。
144 2
|
16天前
|
存储 SQL JSON
阿里泛日志设计与实践问题之SLS Scan的语法该如何定义
阿里泛日志设计与实践问题之SLS Scan的语法该如何定义
|
24天前
|
安全 API 数据库
OceanBase数据库clog日志,删前请三思!一不小心可能引发数据灾难,快来了解正确的日志管理之道!
【8月更文挑战第7天】ModelScope(魔搭)作为开放的模型即服务平台,提供丰富的预训练模型。访问令牌在此类平台中至关重要,用于验证用户身份并授权访问特定模型或服务。本文介绍访问令牌的概念、获取方法及使用示例,强调安全性与有效期内的使用,并简述刷新令牌机制。掌握这些知识可帮助用户安全高效地利用ModelScope的资源。
34 0
|
2月前
|
存储 弹性计算 运维
可观测性体系问题之ECS管控对日志数据的处理如何解决
可观测性体系问题之ECS管控对日志数据的处理如何解决
52 0

相关产品

  • 日志服务
  • 下一篇
    云函数