全部產品
Search
文件中心

Simple Log Service:UNNEST子句

更新時間:Jun 30, 2024

在複雜的業務情境下,日誌欄位的值可能為數組(array)、對象(map)等類型。對這種特殊類型的日誌欄位進行查詢和分析時,您可以先使用UNNEST子句將欄位值展開。

文法

  • 將array類型的資料展開為多行單列形式,列名為column_name

    UNNEST(x) AS table_alias(column_name)
  • 將map類型的資料展開為多行多列形式,列名為key_namevalue_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