帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 日志服务
  4. 操作指南
  5. 查询与分析
  6. 通过索引模式查询和分析日志
  7. SQL分析语法与功能
  8. SQL子句
  9. UNNEST子句

UNNEST子句

  • SQL子句
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

在复杂的业务场景下,日志字段的值可能为数组(array)、对象(map)等类型。对这种特殊类型的日志字段进行查询和分析时,您可以先使用UNNEST子句将字段值展开。

语法

  • 将array类型的数据展开为多行单列形式,列名为column_name。

    UNNEST(x) AS table_alias(column_name)
  • 将map类型的数据展开为多行多列形式,列名为key_name和value_name。

    UNNEST(y) AS table(key_name,value_name)
重要

UNNEST子句处理的是array或者map类型的数据。如果您输入的数据为字符串类型,则需要先转化为JSON类型,然后再转化为array类型或map类型,转化方法为try_cast(json_parse(array_column) as array(bigint))。更多信息,请参见类型转换函数。

参数说明

参数

说明

x

数据类型为array类型。

column_name

将array类型的数据展开后,指定一个列名。该列用于存放array中的元素。

y

数据类型为map类型。

key_name

将map类型的数据展开后,指定一个列名。该列用于存放map中的键。

value_name

将map类型的数据展开后,指定一个列名。该列用于存放map中的键值。

示例

示例1

将number字段的值(array类型)展开为多行单列形式。

  • 字段样例

    number:[49, 50, 45, 47, 50]
  • 查询和分析语句

    * |
    SELECT
      a
    FROM  log,
      UNNEST(cast(json_parse(number) AS array(bigint))) AS t(a)
  • 查询和分析结果unnest

示例2

将number字段的值(array类型)展开为多行单列形式,并进行求和计算。

  • 字段样例

    此处仅提供一条日志样例,求和计算是针对所有日志,即对所有日志中的number字段的值进行求和。

    number:[49, 50, 45, 47, 50]
  • 查询和分析语句

    * |
    SELECT
      sum(a) AS sum
    FROM  log,
      UNNEST(cast(json_parse(number) as array(bigint))) AS t(a)
  • 查询和分析结果unnest

示例3

将number字段的值(array类型)展开为多行单列形式,并对各个值进行分组统计。

  • 字段样例

    number:[49, 50, 45, 47, 50]
  • 查询和分析语句

    * |
    SELECT
      a, count(*) AS count
    FROM  log,
      UNNEST(cast(json_parse(number) as array(bigint))) AS t(a) GROUP BY a
  • 查询和分析结果unnest

示例4

将number字段的值(map类型)展开为多行多列形式。

  • 字段样例

    result:{
      anomaly_type:"OverThreshold"
      dim_name:"request_time"
      is_anomaly:true
      score:1
      value:"3.000000"}
  • 查询和分析语句

    * |
    select
      key,
      value
    FROM  log,
      UNNEST(
        try_cast(json_parse(result) as map(varchar, varchar))
      ) AS t(key, value)
  • 查询和分析结果unnest

示例5

将number字段的值(map类型)展开为多行多列形式,并对各个键进行分组统计。

  • 字段样例

    result:{
      anomaly_type:"OverThreshold"
      dim_name:"request_time"
      is_anomaly:true
      score:1
      value:"3.000000"}
  • 查询和分析语句

    * |
    select
      key,
      count(*) AS count
    FROM  log,
      UNNEST(
        try_cast(json_parse(result) as map(varchar, varchar))
      ) AS t(key, value)
    GROUP BY
      key
  • 查询和分析结果unnest

示例6

使用histogram函数获取各个请求方法对应的请求数量,返回结果为map类型。然后通过unnest子句将histogram函数的返回结果展开为多行多列形式,并通过柱状图展示。

  • 查询和分析语句

    * |
    SELECT
      key,
      value
    FROM(
        SELECT
          histogram(request_method) AS result
        FROM      log
      ),
      UNNEST(result) AS t(key, value)
  • 查询和分析结果unnest

相关文章

EXCEPT子句 2025-04-22 10:57

EXCEPT子句用于组合两个SELECT子句的结果集,并返回两个结果集的差集。即返回的行存在于第一个SELECT子句的结果集中但不存在于第二个SELECT子句的结果集中。本文介绍EXCEPT子句的基本语法和示例。 语法

EXISTS子句 2025-04-22 10:57

EXISTS子句用于判断子查询中是否存在查询结果。当EXISTS子句内的查询结果存在时,返回true,并执行外层SQL语句。 语法

GROUP BY子句 2025-04-22 10:57

GROUP BY子句通常与聚合函数一起使用,用来对查询结果中的数据行进行分组。每个分组都基于一列或多列的值。通过这种方式,可以为每个不同的组合生成一个汇总行,从而帮助用户更有效地分析数据。此外,GROUP BY子句还可以搭配ROLLUP、

HAVING子句 2025-04-22 10:57

HAVING子句用于指定过滤分组结果(GROUP BY)或聚合计算结果的条件。 语法

INSERT INTO子句 2025-04-22 10:57

INSERT INTO子句支持将SQL计算结果写入到同一Project下的其他Logstore中。 语法

INTERSECT子句 2025-04-22 10:57

INTERSECT子句用于组合两个SELECT子句的结果集,并仅返回两个结果集中共同存在的行。本文介绍INTERSECT子句的基本语法和示例。 语法

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1