tencent cloud

Cloud Log Service

MAP関数

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-12 14:32:16
AI翻訳
本稿では、MAP 関数と演算子の基本的な構文と例を紹介します。MAP 関数と演算子は MAP 型を使用し、キーは文字型である必要があり、null にすることはできません。値は null を許可します。
関数名
ステートメント
意味
map[key]
map から指定されたキーに対応する値を取得します。
cardinality(x)
map の基数(サイズ)を返します。
element_at(map(k, v), key)
指定されたキーに対応する値を返します。キーが存在しない場合は NULL を返します。
map() / map(array(k), array(v))
空のマップを返すか、指定されたキー/値の配列を使用してマップを作成します。
map_from_entries(array(row(k, v)))
指定されたエントリの配列からマップを作成します。
multimap_from_entries(array(row(k, v)))
指定されたエントリの配列から multimap を作成します。各キーには複数の値を関連付けることができます。
map_concat(map1, map2, ..., mapN)
指定されたすべての map の和集合を返します。
map_filter(map(k, v), function(k, v, boolean))
map から関数が true を返すエントリを抽出して新しい map を構築します。
map_keys(x)
map 内のすべてのキーを返します。
map_values(x)
map 内のすべての値を返します。
map_zip_with(map(k, v1), map(k, v2), function)
2 つの map を 1 つに結合し、同じキーに対応する値のペアに関数を適用します。
transform_keys(map(k1, v), function(k1, v, k2))
map の各エントリに関数を適用し、キーを変換します。
transform_values(map(k, v1), function(k, v1, v2))
map の各エントリに関数を適用し、値を変換します。

添字演算子 []

[] 演算子は、map から指定されたキーに対応する値を取得するために使用されます。キーが map に存在しない場合、この演算子はエラーをスローします。キーが存在しない場合に NULL を返すには、element_at 関数を使用してください。

構文

map[key]

パラメータ説明

パラメータ
説明
map
パラメータ値は MAP 型です。
key
取得するキー名です。

戻り値の型

map 内の値に対応する型。

例

例1:name_to_age_map からキー Bob に対応する値を取得します。
クエリおよび分析ステートメント。
* | SELECT name_to_age_map['Bob'] AS bob_age
クエリおよび分析結果。
22
例2:map を構築し、キーが key2 の要素にアクセスします。
クエリおよび分析ステートメント。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY['v1', 'v2', 'v3'])['key2']
クエリおよび分析結果。
v2

cardinality 関数

cardinality関数は、mapの基数(サイズ)、つまりmap内のキーと値のペアの数を返すために使用されます。

構文

cardinality(x)

パラメータ説明

パラメータ
説明
x
パラメータ値は MAP 型です。

戻り値の型

bigint型。

例

map内のキーと値のペアの数を計算します。
クエリおよび分析ステートメント。
* | SELECT cardinality(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]))
クエリおよび分析結果。
3

element_at 関数

element_at関数は、指定されたキーに対応する値を返すために使用されます。添字演算子[]とは異なり、キーがmapに存在しない場合、element_atはエラーをスローせずにNULLを返します。

構文

element_at(map(k, v), key)

パラメータ説明

パラメータ
説明
map(k, v)
パラメータ値は MAP 型であり、k はキー型、v は値型です。
key
取得するキー名です。

戻り値の型

v型(map内の値に対応する型)、キーが存在しない場合はNULLを返します。

例

map内の指定されたキーの値を取得し、キーが存在しない場合はNULLを返します。
クエリおよび分析ステートメント。
* | SELECT element_at(MAP(ARRAY['a', 'b'], ARRAY['test1', 'test2']), 'c')
クエリおよび分析結果。
NULL

map 関数

map関数は、空のmapを返すか、指定されたキー/値の配列を使用してmapを作成するために使用されます。データ型コンストラクタを使用してmapを作成する場合、キー配列と、同じ順序の値配列を提供する必要があります。値は同じ型を使用する必要があります。または、値を共通の型に強制変換できます。

構文

map()
map(array(k), array(v))

パラメータ説明

パラメータ
説明
array(k)
キー配列。
array(v)
値の配列。キー配列と同じ長さである必要があります。

戻り値の型

map(k, v)型。

例

例1:空のmapを返します。
クエリおよび分析ステートメント。
* | SELECT map()
クエリおよび分析結果。
{}
例2:整数値を含むmapを作成します。
クエリおよび分析ステートメント。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY[2373, 3463, 45837])
クエリおよび分析結果。
{"key1":2373,"key2":3463,"key3":45837}
例3:文字列値を含むmapを作成します。
クエリおよび分析ステートメント。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY['v1', 'v2', 'v3'])
クエリおよび分析結果。
{"key1":"v1","key2":"v2","key3":"v3"}
例4:整数と小数の値を使用してmapを作成すると、値は自動的に小数型に変換されます。
クエリおよび分析ステートメント。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY[23, 34.63, 45.837])
クエリおよび分析結果。
{"key1":23,"key2":34.63,"key3":45.837}
例5:NULL値を含むmapを作成します。
クエリおよび分析ステートメント。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY['v1', NULL, 'v3'])
クエリおよび分析結果。
{"key1":"v1","key2":null,"key3":"v3"}
説明:
集計方法でmapを作成する必要がある場合は、map_agg()関数とmultimap_agg()関数を参照してください。

map_from_entries 関数

map_from_entries関数は、指定されたエントリの配列からmapを作成するために使用されます。配列内の各要素は、キーと値のペアを含むrowです。

構文

map_from_entries(array(row(k, v)))

パラメータ説明

パラメータ
説明
array(row(k, v))
キーと値のペアを含む行配列で、各要素は (k, v) 形式のタプルです。

戻り値の型

map(k, v)型。

例

エントリの配列からmapを作成します。
クエリおよび分析ステートメント。
* | SELECT map_from_entries(ARRAY[(1, 'x'), (2, 'y')])
クエリおよび分析結果。
{"1":"x","2":"y"}

multimap_from_entries 関数

multimap_from_entries関数は、指定されたエントリの配列からmultimapを作成するために使用されます。map_from_entriesとは異なり、multimapでは各キーに複数の値を関連付けることができ、同じキーの値は配列に収集されます。

構文

multimap_from_entries(array(row(k, v)))

パラメータ説明

パラメータ
説明
array(row(k, v))
キーと値のペアを含む行配列で、重複キーが許可されます。

戻り値の型

map(k, array(v))型。

例

エントリの配列からmultimapを作成します。キー1には複数の値が関連付けられます。
クエリおよび分析ステートメント。
* | SELECT multimap_from_entries(ARRAY[(1, 'x'), (2, 'y'), (1, 'z')])
クエリおよび分析結果。
{"1":["x","z"],"2":["y"]}

map_concat 関数

map_concat関数は、指定されたすべてのmapの和集合を返すために使用されます。あるキーが複数のmapに出現する場合、結果のmapにおけるそのキーの値は、パラメータリスト内でそのキーを含む最後のmapから取得されます。

構文

map_concat(map1(k, v), map2(k, v), ..., mapN(k, v))

パラメータ説明

パラメータ
説明
map1, map2, ..., mapN
マージする複数の MAP 型パラメータは、キーと値の型が一致している必要があります。

戻り値の型

map(k, v)型。

例

2つのmapを結合し、重複するキーについては後者の値を採用します。
クエリおよび分析ステートメント。
* | SELECT map_concat(MAP(ARRAY['a'], ARRAY[1]), MAP(ARRAY['a', 'b'], ARRAY[2, 3]))
クエリおよび分析結果。
{"a":2,"b":3}

map_filter 関数

map_filter関数は、mapから条件を満たすエントリを選別し、新しいmapを構築するために使用されます。Lambda関数によって各キーと値のペアを判定し、trueを返すエントリのみを保持します。

構文

map_filter(map(k, v), function(k, v, boolean))

パラメータ説明

パラメータ
説明
map(k, v)
パラメータ値は MAP 型です。
function(k, v, boolean)
Lambda 関数は、キー k と値 v をパラメータとして受け取り、ブール値を返します。構文:(k, v) -> ブール式。

戻り値の型

map(k, v)型。

例

例1:値がNULLのエントリをフィルタリングして除外します。
クエリおよび分析ステートメント。
* | SELECT map_filter(MAP(ARRAY[10, 20, 30], ARRAY['a', NULL, 'c']), (k, v) -> v IS NOT NULL)
クエリおよび分析結果。
{"10":"a","30":"c"}
例2:値が10より大きいエントリをフィルタリングして抽出します。
クエリおよび分析ステートメント。
* | SELECT map_filter(MAP(ARRAY['k1', 'k2', 'k3'], ARRAY[20, 3, 15]), (k, v) -> v > 10)
クエリおよび分析結果。
{"k1":20,"k3":15}

map_keys 関数

map_keys関数は、map内のすべてのキーで構成される配列を返すために使用されます。

構文

map_keys(x)

パラメータ説明

パラメータ
説明
x
パラメータ値は MAP(k, v) 型です。

戻り値の型

array(k)型。

例

map内のすべてのキーを取得します。
クエリおよび分析ステートメント。
* | SELECT map_keys(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]))
クエリおよび分析結果。
["a","b","c"]

map_values 関数

map_values関数は、map内のすべての値で構成される配列を返すために使用されます。

構文

map_values(x)

パラメータ説明

パラメータ
説明
x
パラメータ値は MAP(k, v) 型です。

戻り値の型

array(v)型。

例

map内のすべての値を取得します。
クエリおよび分析ステートメント。
* | SELECT map_values(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]))
クエリおよび分析結果。
[1, 2, 3]

map_zip_with 関数

map_zip_with関数は、2つのmapを1つにマージするために使用されます。Lambda関数によって同じキーを持つ値のペアを処理します。一方のmapにのみ存在するキーについては、もう一方のmapに対応する値としてNULLが渡されます。

構文

map_zip_with(map(k, v1), map(k, v2), function(k, v1, v2, v3))

パラメータ説明

パラメータ
説明
map(k, v1)
最初の MAP 型パラメータです。
map(k, v2)
2番目の MAP 型パラメータです。キーの型は最初の map と同じである必要があります。
function(k, v1, v2, v3)
Lambda 関数は、キー k、最初の map の値 v1、2番目の map の値 v2 を受け取り、新しい値 v3 を返します。構文:(k, v1, v2) -> 式。

戻り値の型

map(k, v3)型。

例

例1:2つのmapを結合し、対応する文字列値を連結します。
クエリおよび分析ステートメント。
* | SELECT map_zip_with(
MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']),
MAP(ARRAY[1, 2, 3], ARRAY['d', 'e', 'f']),
(k, v1, v2) -> concat(v1, v2)
)
クエリおよび分析結果。
{"1":"ad","2":"be","3":"cf"}
例2:2つのmapをマージし、値の商を計算し、キー名を連結します。
クエリおよび分析ステートメント。
* | SELECT map_zip_with(
MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 8, 27]),
MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]),
(k, v1, v2) -> k || CAST(v1 / v2 AS VARCHAR)
)
クエリおよび分析結果。
{"a":"a1","b":"b4","c":"c9"}

transform_keys 関数

transform_keys関数は、mapの各エントリにLambda関数を適用してキーを変換し、新しいmapを生成するために使用されます。値は変更されません。

構文

transform_keys(map(k1, v), function(k1, v, k2))

パラメータ説明

パラメータ
説明
map(k1, v)
パラメータ値は MAP 型であり、k1 は元のキー型です。
function(k1, v, k2)
Lambda 関数は、元のキー k1 と値 v を受け取り、新しいキー k2 を返します。構文:(k, v) -> 新しいキーの式。

戻り値の型

map(k2, v)型。

例

例1:整数キーに1を加算します。
クエリおよび分析ステートメント。
* | SELECT transform_keys(MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), (k, v) -> k + 1)
クエリおよび分析結果。
{"2":"a","3":"b","4":"c"}
例2:値の平方を新しいキーとして使用します。
クエリおよび分析ステートメント。
* | SELECT transform_keys(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]), (k, v) -> v * v)
クエリおよび分析結果。
{"1":1,"4":2,"9":3}
例3:キーと値を連結して新しいキーとして使用します。
クエリおよび分析ステートメント。
* | SELECT transform_keys(MAP(ARRAY['a', 'b'], ARRAY[1, 2]), (k, v) -> k || CAST(v AS VARCHAR))
クエリおよび分析結果。
{"a1":1,"b2":2}
例4:別の map を使用してキーをマッピングします。
クエリおよび分析ステートメント。
* | SELECT transform_keys(
MAP(ARRAY[1, 2], ARRAY[1.0, 1.4]),
(k, v) -> MAP(ARRAY[1, 2], ARRAY['one', 'two'])[k]
)
クエリおよび分析結果。
{"one":1,"two":1.4}

transform_values 関数

transform_values関数は、mapの各エントリにLambda関数を適用して値を変換し、新しいmapを生成するために使用されます。キーは変更されません。

構文

transform_values(map(k, v1), function(k, v1, v2))

パラメータ説明

パラメータ
説明
map(k, v1)
パラメータ値は MAP 型で、v1 は元の値の型です。
function(k, v1, v2)
Lambda 関数は、キー k と元の値 v1 を受け取り、新しい値 v2 を返します。構文:(k, v) -> 新しい値の式。

戻り値の型

map(k, v2)型。

例

例1:値に対応するキーを加算します。
クエリおよび分析ステートメント。
* | SELECT transform_values(MAP(ARRAY[1, 2, 3], ARRAY[10, 20, 30]), (k, v) -> v + k)
クエリおよび分析結果。
{"1":11,"2":22,"3":33}
例2:キーの平方を新しい値として使用します。
クエリおよび分析ステートメント。
* | SELECT transform_values(MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), (k, v) -> k * k)
クエリおよび分析結果。
{"1":1,"2":4,"3":9}
例3:キーと値を連結して新しい値として使用します。
クエリおよび分析ステートメント。
* | SELECT transform_values(MAP(ARRAY['a', 'b'], ARRAY[1, 2]), (k, v) -> k || CAST(v AS VARCHAR))
クエリおよび分析結果。
{"a":"a1","b":"b2"}
例4:別の map を使用して値をマッピングし、連結します。
クエリおよび分析ステートメント。
* | SELECT transform_values(
MAP(ARRAY[1, 2], ARRAY[1.0, 1.4]),
(k, v) -> MAP(ARRAY[1, 2], ARRAY['one', 'two'])[k] || '_' || CAST(v AS VARCHAR)
)
クエリおよび分析結果。
{"1":"one_1.0","2":"two_1.4"}


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック