全部產品
Search
文件中心

Simple Log Service:Map映射函數和運算子

更新時間:Nov 16, 2024

本文介紹Map映射函數和運算子的基本文法及樣本。

Log Service支援如下Map映射函數和運算子。

重要 在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status"status"表示日誌欄位status。

函數名稱

文法

說明

支援SQL

支援SPL

下標運算子

[x]

擷取Map中目標鍵的值。

×

cardinality函數

cardinality(x)

計算Map的大小。

×

element_at函數

element_at(x, key)

擷取Map中目標鍵的值。

histogram函數

histogram(x)

對查詢和分析結果進行分組,返回結果為JSON格式。

×

histogram_u函數

histogram_u(x)

對查詢和分析結果進行分組,返回結果為多行多列格式。

×

map函數

map()

返回一個空Map。

map(x, y)

將兩個數組映射為一個Map。

map_agg函數

map_agg(x, y)

xy映射為一個Map。x為Map中的鍵,y為Map中的索引值。當y存在多個值時,隨機提取一個值作為索引值。

×

map_concat函數

map_concat(x, y...)

將多個Map合并為一個Map。

map_filter函數

map_filter(x, lambda_expression)

結合Lambda運算式,用於過濾Map中的元素。

map_keys函數

map_keys(x)

提取Map中所有的鍵,並以數組形式返回。

map_values函數

map_values(x)

提取Map中所有鍵的值,並以數組形式返回。

multimap_agg函數

multimap_agg(x, y)

xy映射為一個Map。x為Map中的鍵,y為Map中的索引值,索引值為數組格式。當y存在多個值時,提取所有的值作為索引值。

×

下標運算子

下標運算子用於擷取Map中的目標鍵的值。

文法

[x]

參數說明

參數

說明

x

參數值為varchar類型。

傳回值類型

任意資料類型。

樣本

Log Service資料加工日誌中etl_context欄位值為map類型,您可以使用下標運算子擷取etl_context欄位值中project的值。

  • 欄位範例

    etl_context: {
     project:"datalab-148****6461-cn-chengdu"
     logstore:"internal-etl-log"
     consumer_group:"etl-83****4d1965"
     consumer:"etl-b2d40ed****c8d6-291294"
     shard_id:"0" }
  • 查詢和分析語句

    * | SELECT try_cast(json_parse(etl_context) AS map(varchar, varchar))['project']
  • 查詢和分析結果下標運算子

cardinality函數

cardinality函數用於計算Map的大小。

文法

cardinality(x)

參數說明

參數

說明

x

參數值為map類型。

傳回值類型

bigint類型。

樣本

使用histogram函數擷取各個要求方法對應的請求數量,再通過cardinality函數擷取要求方法的種類數。

  • 查詢和分析語句

    * |
    SELECT
      histogram(request_method) AS request_method,
      cardinality(histogram(request_method)) AS "kinds"
  • 查詢和分析結果cardinality

element_at函數

element_at函數用於擷取Map中目標鍵的值。

文法

element_at(x, key)

參數說明

參數

說明

x

參數值為map類型。

key

Map中的一個鍵。

傳回值類型

任意資料類型。

樣本

使用histogram函數擷取各個要求方法對應的請求數量,然後通過element_at函數擷取DELETE欄位的值。

  • 查詢和分析語句

    * |
    SELECT
      histogram(request_method) AS request_method,
      element_at(histogram(request_method),'DELETE') AS "count"
  • 查詢和分析結果element_at

histogram函數

histogram函數用於對查詢和分析結果進行分組,返回結果為JSON格式。類似於* | SELECT count(*) GROUP BY x

文法

histogram(x)

參數說明

參數

說明

x

參數值為任意資料類型。

傳回值類型

map類型。

樣本

使用histogram函數擷取各個要求方法對應的請求數量。

  • 查詢和分析語句

    * | SELECT histogram(request_method) AS request_method
  • 查詢和分析結果histogram

histogram_u函數

histogram_u函數用於對查詢和分析結果進行分組,返回結果為多行多列。

文法

histogram_u(x)

參數說明

參數

說明

x

參數值為任意資料類型。

傳回值類型

bigint類型。

樣本

使用histogram_u函數擷取各個要求方法對應的請求數量,並以直條圖展示查詢和分析結果。

  • 查詢和分析語句

    *|SELECT  histogram_u(request_method) as request_method
  • 查詢和分析結果histogram_u

map函數

map函數用於返回一個空Map或者將兩個數組映射為一個Map。

文法

  • 返回一個空Map。

    map()
  • 將兩個數組映射為一個Map。

    map(x,y) 

參數說明

參數

說明

x

參數值為array類型。

y

參數值為array類型。

傳回值類型

map類型。

樣本

  • 樣本1:class欄位表示班級,number欄位表示班級人數,欄位值為array類型。現使用map函數將兩個欄位的值(兩個數組)映射為一個Map,將班級和班級人數一一對應。

    • 欄位範例

      class:["class01","class02","class03","class04","class05"]
      number:[49,50,45,47,50]
    • 查詢和分析語句

      * | SELECT map(try_cast(json_parse(class) AS array(varchar)) ,try_cast(json_parse(number) AS array(bigint)))
    • 查詢和分析結果map

  • 樣本2:返回一個空Map。

    • 查詢和分析語句

      *| SELECT map()
    • 查詢和分析結果map

map_agg函數

map_agg函數用於將xy映射為一個Map。x為Map中的鍵,y為Map中的索引值。當y存在多個值時,隨機提取一個值作為索引值。

文法

map_agg(x, y)

參數說明

參數

說明

x

參數值為任意資料類型。

y

參數值為任意資料類型。

傳回值類型

map類型。

樣本

提取request_method欄位值和request_time欄位值,然後映射為一個Map。request_method欄位值為Map中的鍵,request_time欄位值為Map中的索引值。

  • 欄位範例

    request_method:POST
    request_time:80
  • 查詢和分析語句

    * | SELECT map_agg(request_method,request_time)
  • 查詢和分析結果map_agg

map_concat函數

map_concat函數用於將多個Map合并為一個Map。

文法

map_concat(x, y)

參數說明

參數

說明

x

參數值為map類型。

y

參數值為map類型。

傳回值類型

map類型。

樣本

Log Service資料加工日誌中etl_context欄位值和progress欄位值都為map類型,您可以使用map_concat函數將這兩個欄位值合并為一個Map。

  • 欄位樣本

    etl_context: {
     project:"datalab-148****6461-cn-chengdu"
     logstore:"internal-etl-log"
     consumer_group:"etl-83****4d1965"
     consumer:"etl-b2d40ed****c8d6-291294"
     shard_id:"0" }
    progress: {
     accept:3
     dropped:0
     delivered:3
     failed:0 }
  • 查詢和分析語句

    * |
    SELECT
      map_concat(
        cast (
          json_parse(etl_context) AS map(varchar, varchar)
        ),
        cast (json_parse(progress) AS map(varchar, varchar))
      )
  • 查詢和分析結果map_concat

map_filter函數

map_filter函數和Lambda運算式結合,用於過濾Map中的元素。

文法

map_filter(x, lambda_expression)

參數說明

參數

說明

x

參數值為map類型。

lambda_expression_expression

Lambda運算式。更多資訊,請參見Lambda運算式

傳回值類型

map類型。

樣本

將兩個數組映射為一個新的Map,且Map中的索引值不為null。其中(k, v) -> v is not null為Lambda運算式。

  • 查詢和分析語句

    * | SELECT map_filter(map(array[10, 20, 30], array['a', NULL, 'c']), (k, v) -> v is not null)
  • 查詢和分析結果map_filter

map_keys函數

map_keys函數用於提取Map中所有的鍵,並以數組形式返回。

文法

map_keys(x)

參數說明

參數

說明

x

參數值為map類型。

傳回值類型

array類型。

樣本

Log Service資料加工日誌中etl_context欄位值為map類型,您可以使用map_keys函數提取etl_context欄位值中所有的鍵。

  • 欄位範例

    etl_context: {
     project:"datalab-148****6461-cn-chengdu"
     logstore:"internal-etl-log"
     consumer_group:"etl-83****4d1965"
     consumer:"etl-b2d40ed****c8d6-291294"
     shard_id:"0" }
  • 查詢和分析語句

    * | SELECT map_keys(try_cast(json_parse(etl_context) AS map(varchar, varchar)))
  • 查詢和分析結果map_keys

map_values函數

map_values函數用於提取Map中所有鍵的值,並以數組形式返回。

文法

map_values(x)

參數說明

參數

說明

x

參數值為map類型。

傳回值類型

array類型。

樣本

Log Service資料加工日誌中etl_context欄位值為map類型,您可以使用map_values函數提取etl_context欄位值中所有鍵的值。

  • 欄位範例

    etl_context: {
     project:"datalab-148****6461-cn-chengdu"
     logstore:"internal-etl-log"
     consumer_group:"etl-83****4d1965"
     consumer:"etl-b2d40ed****c8d6-291294"
     shard_id:"0" }
  • 查詢和分析語句

    * | SELECT map_values(try_cast(json_parse(etl_context) AS map(varchar, varchar)))
  • 查詢和分析結果map_values

multimap_agg函數

multimap_agg函數用於將xy映射為一個Map。x為Map中的鍵,y為Map中的索引值,索引值為數組格式。當y存在多個值時,提取所有的值作為索引值。

文法

multimap_agg(x, y)

參數說明

參數

說明

x

參數值為任意資料類型。

y

參數值為任意資料類型。

傳回值類型

map類型。

樣本

提取request_method欄位和request_time欄位的所有值,然後映射為一個Map。request_method欄位值為Map中的鍵,request_time欄位值為Map中的索引值,索引值為數組格式。

  • 欄位範例

    request_method:POST
    request_time:80
  • 查詢和分析語句

    * | SELECT multimap_agg(request_method,request_time)
  • 查詢和分析結果multimap_agg