すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:マップ関数と演算子

最終更新日:Jun 11, 2026

SLS のマップ関数と演算子の構文および使用方法について説明します。

Simple Log Service (SLS) は、以下のマップ関数と演算子に対応しています。

重要

分析文で文字列を使用する場合は、文字列を一重引用符 ('') で囲む必要があります。囲まれていない文字列または二重引用符 ("") で囲まれている文字列は、フィールド名または列名を示します。たとえば、 'status' は「status」という文字列を示し、status または "status" は「status」というフィールドを示します。

関数名

構文

説明

SQL

SPL

添字演算子

[x]

マップから、角括弧 [] 内で指定されたキーの値を返します。

×

cardinality 関数

cardinality(x)

マップのカーディナリティ (サイズ) を返します。

×

element_at 関数

element_at(x, key)

マップから指定されたキーの値を返します。

histogram 関数

histogram(x)

クエリと分析の結果をマップにグループ化します。

×

histogram_u 関数

histogram_u(x)

結果を複数行複数列形式でグループ化します。

×

map 関数

map()

空のマップを返します。

map(x, y)

2つの配列からマップを作成します。

map_agg 関数

map_agg(x, y)

x をキー、 y を値としてマップを作成します。y に複数の値がある場合は、いずれか1つがランダムに選択されます。

×

map_concat 関数

map_concat(x, y...)

複数のマップを1つのマップに結合します。

map_filter 関数

map_filter(x, lambda_expression)

ラムダ式に基づいてマップ内のエントリをフィルタリングします。

map_keys 関数

map_keys(x)

マップからすべてのキーを抽出し、配列として返します。

map_values 関数

map_values(x)

マップからすべての値を抽出し、配列として返します。

multimap_agg 関数

multimap_agg(x, y)

x をキー、 y を値の配列とするマップを作成します。y に複数の値がある場合は、すべて収集されます。

×

添字演算子

添字演算子は、マップから指定されたキーの値を返します。

構文

[x]

パラメーター

パラメーター

説明

x

アクセスするキー。 varchar 型である必要があります。

戻り値のデータ型

結果のデータ型は、マップの値の型と同じです。

SLS データ変換ログでは、etl_context フィールドはマップ型です。 添字演算子を使用して、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 try_cast(json_parse(etl_context) AS map(varchar, varchar))['project']
  • _col0 カラムは、etl_context から抽出されたプロジェクトの値として、datalab-148****6461-cn-chengdu を返します。

カーディナリティ関数

カーディナリティ関数は、マップのカーディナリティ (サイズ) を返します。

構文

cardinality(x)

パラメーター

パラメーター

説明

x

入力マップ。

戻り値のデータ型

bigint

histogram 関数でメソッドごとのリクエスト数を集計し、cardinality 関数でユニークなメソッド数をカウントします。

  • クエリと分析文

    * |
    SELECT
      histogram(request_method) AS request_method,
      cardinality(histogram(request_method)) AS "kinds"
  • クエリと分析結果: request_method カラムは {"DELETE":5,"POST":7,"GET":41,"PUT":4} を返し、kinds カラムは 4 を返します。これはリクエストメソッドが 4 種類であることを示します。

element_at 関数

element_at 関数は、マップから指定したキーの値を返します。

構文

element_at(x, key)

パラメーター

パラメーター

説明

x

マップである必要があります。

key

マップ内のキー。

戻り値のデータ型

結果のデータ型は、マップの値の型と同じです。

ヒストグラムを使用してメソッド別にリクエストをカウントし、element_at を使用して DELETE のカウントを取得します。

  • クエリと分析文

    * |
    SELECT
      histogram(request_method) AS request_method,
      element_at(histogram(request_method),'DELETE') AS "count"
  • クエリと分析結果:request_method カラムは {"HEAD":686,"DELETE":13619,"POST":34365,"GET":138097,"PUT":34056} を返し、count カラムは 13619 (DELETE リクエストのカウント) を返します。

ヒストグラム関数

ヒストグラム関数は、 * | SELECT count(*) GROUP BY x と同様に、結果を JSON マップとしてグループ化します。

構文

histogram(x)

パラメーター

パラメーター

説明

x

パラメーターには任意のデータ型を指定できます。

戻り値のデータ型

マップ

ヒストグラムを使用してメソッド別にリクエストをカウントします。

  • クエリと分析文:

    * | SELECT histogram(request_method) AS request_method
  • 結果は {"HEAD":30,"DELETE":564,"POST":1382,"GET":5420,"PUT":1334} です。GET のカウントが 5,420 で最も多くなっています。

histogram_u 関数

histogram_u 関数はデータをグループ化し、結果を複数行、複数列の形式で返します。

構文

histogram_u(x)

パラメーター

パラメーター

説明

x

パラメーターには任意のデータ型を指定できます。

戻り値のデータ型

複数行、複数列の形式

histogram_u を使用してメソッド別にリクエストをカウントし、結果を縦棒グラフとして表示します。

  • クエリと分析文

    *|SELECT  histogram_u(request_method) as request_method
  • クエリと分析結果histogram_u

map 関数

map 関数は、空のマップを返すか、2 つの配列からマップを作成します。

構文

  • 空のマップを返します。

    map()
  • 2 つの配列からマップを作成します。

    map(x, y)

パラメーター

パラメーター

説明

x

パラメーターは配列である必要があります。

y

パラメーターは配列である必要があります。

戻り値のデータ型

map

  • 例 1: class フィールドと number フィールドは配列です。map 関数を使用して、各 class と学生数のキーと値のマッピングを作成します。

    • サンプルフィールド

      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)))
    • クエリと分析結果は {"class01":49,"class03":45,"class02":50,"class05":50,"class04":47} です。

  • 例 2: 空のマップを返します。

    • クエリと分析文

      * | SELECT map()
    • 結果は {} で、空のマップです。

map_agg 関数

map_agg 関数は、xy をマップに集約します。このとき、x はキー、y は値です。y に複数の値がある場合は、いずれか 1 つがランダムに選択されます。

構文

map_agg(x, y)

パラメーター

パラメーター

説明

x

データ型は任意です。

y

データ型は任意です。

戻り値のデータ型

マップ

request_method (キー) と request_time (値) をマップに集約します。

  • サンプルフィールド

    request_method:POST
    request_time:80
    
    request_method:GET
    request_time:51
    
    request_method:HEAD
    request_time:47
    
    request_method:DELETE
    request_time:26
    
    request_method:PUT
    request_time:49
  • クエリと分析ステートメント

    * | SELECT map_agg(request_method,request_time)
  • クエリと分析結果は {"HEAD":47.0,"DELETE":26.0,"POST":80.0,"GET":51.0,"PUT":49.0} です。

map_concat 関数

map_concat 関数は、複数のマップを 1 つのマップにマージします。

構文

map_concat(x, y)

パラメーター

パラメーター

説明

x

パラメーターはマップである必要があります。

y

パラメーターはマップである必要があります。

戻り値のデータ型

マップ

SLS データ変換ログでは、etl_contextprogress はいずれもマップ型です。 map_concat を使用してこれらをマージします。

  • サンプルフィールド

    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))
      )
  • クエリと分析結果

    {"project":"datalab-148****6461-cn-chengdu","logstore":"internal-etl-log","consumer_group":"etl-83****4d1965","consumer":"etl-b2d40ed****c8d6-291294","shard_id":"0","accept":"3","dropped":"0","delivered":"3","failed":"0"}

map_filter 関数

map_filter 関数は、ラムダ式に基づいてマップをフィルタリングします。

構文

map_filter(x, lambda_expression)

パラメーター

パラメーター

説明

x

パラメーターはマップである必要があります。

lambda_expression

ラムダ式です。詳細については、ラムダ式をご参照ください。

戻り値のデータ型

マップ

2 つの配列を新しいマップにマッピングし、null 値をフィルタリングして除外します。 式 (k, v) -> v is not null はラムダ式です。

  • クエリと分析文

    * | SELECT map_filter(map(array[10, 20, 30], array['a', NULL, 'c']), (k, v) -> v is not null)
  • クエリと分析結果は {"10":"a","30":"c"} です。

map_keys 関数

map_keys 関数は、マップからすべてのキーを抽出し、配列として返します。

構文

map_keys(x)

パラメーター

パラメーター

説明

x

パラメーターはマップである必要があります。

戻り値のデータ型

配列

SLS データ変換ログでは、etl_context フィールドはマップ型です。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)))
  • クエリと分析の結果は ["consumer","consumer_group","logstore","project","shard_id"] です。

map_values 関数

map_values 関数は、マップからすべての値を抽出し、配列として返します。

構文

map_values(x)

パラメーター

パラメーター

説明

x

パラメーターはマップでなければなりません。

戻り値のデータ型

配列

SLS のデータ変換ログでは、etl_context フィールドはマップ型です。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)))
  • 結果として、etl_context 内のすべての値を含む配列 ["datalab-148****6461-cn-chengdu", "internal-etl-log", "etl-83****4d1965", "etl-b2d40ed****c8d6-291294", "0"] が返されます。

multimap_agg 関数

multimap_agg 関数は、xy をマップにマッピングします。このマップでは、x がキー、y が値 (配列) です。同じキーに対して複数の y 値が存在する場合、それらはすべて配列にまとめられます。

構文

multimap_agg(x, y)

パラメーター

パラメーター

説明

x

任意のデータ型を使用できます。

y

任意のデータ型を使用できます。

戻り値のデータ型

マップ

multimap_agg を使用して、request_method (キー) と request_time (値の配列) を対応付けます。

  • サンプルフィールド

    request_method:POST
    request_time:80
  • クエリと分析文

    * | SELECT multimap_agg(request_method,request_time)
  • 結果では、各 HTTP メソッドが request_time の値の配列に対応付けられます。たとえば、DELETE は [28.0, 80.0, 21.0, 54.0, ...] に、POST は [77.0, 27.0, 52.0, 25.0, ...] に対応付けられます。