Map 関数
extractKeyValuePairs
導入バージョン: v
任意の文字列からキーと値のペアを抽出します。文字列は 100% キー・バリュー形式で構造化されている必要はありません。
ノイズ(例: ログファイル)を含んでいても問題ありません。解釈対象となるキー・バリュー形式は、関数の引数で指定する必要があります。
キーと値のペアは、キーに続いて key_value_delimiter と値が並ぶ形で構成されます。引用符付きのキーおよび値にも対応しています。キーと値のペア同士は、ペア区切り文字で区切られている必要があります。
構文
引数
data- キーと値のペアを抽出する対象の文字列。String または FixedString。key_value_delimiter- キーと値の間の区切り文字として使用する文字。デフォルトは:。型は String または FixedString。pair_delimiters- ペア間の区切り文字として使用する文字の集合。デフォルトは\space、,、;。型は String または FixedString。quoting_character- クオート文字として使用する文字。デフォルトは". 型は String または FixedString。unexpected_quoting_character_strategy-read_keyおよびread_valueフェーズ中に想定外の位置に現れたクオート文字を処理するための戦略。指定可能な値:invalid、accept、promote。invalidはキー/値を破棄してWAITING_KEY状態に戻ります。acceptは通常の文字として扱います。promoteはREAD_QUOTED_{KEY/VALUE}状態へ遷移し、次の文字から処理を開始します。デフォルト値はINVALIDです。
戻り値
- 抽出されたキーと値のペアを Map(String, String) 型のマップとして返します。
例
クエリ:
単純な例
引用文字としての単一引用符
unexpected_quoting_character_strategy の例:
unexpected_quoting_character_strategy=invalid
unexpected_quoting_character_strategy=accept
unexpected_quoting_character_strategy=promote
エスケープシーケンス非対応環境でのエスケープ
構文
別名: str_to_map, mapFromString
引数
- なし。
戻り値
例
extractKeyValuePairsWithEscaping
導入バージョン: v
extractKeyValuePairs と同じですが、エスケープシーケンスに対応しています。
サポートされるエスケープシーケンス: \x, \N, \a, \b, \e, \f, \n, \r, \t, \v, \0。
標準外のエスケープシーケンスは、次のいずれかに該当しない限り、そのまま(バックスラッシュを含めて)返されます:
\\, ', ", backtick, /, = または ASCII 制御文字 (c <= 31)。
この関数は、事前エスケープおよび事後エスケープが適さないユースケースに適しています。例えば、次の入力文字列を考えます:
a: "aaaa\"bbb"。期待される出力は a: aaaa\"bbbb です。
- 事前エスケープ: 事前エスケープすると、出力は
a: "aaaa"bbb"となり、その後extractKeyValuePairsはa: aaaaを出力します。- 事後エスケープ:
extractKeyValuePairsはa: aaaa\を出力し、事後エスケープを行ってもそのまま保持されます。
- 事後エスケープ:
先頭のエスケープシーケンスはキーではスキップされ、値に対しては不正とみなされます。
エスケープシーケンス対応が有効な場合のエスケープシーケンス
構文
引数
- なし。
戻り値
例
map
導入バージョン: v21.1
キーと値のペアから、Map(key, value) 型の値を作成します。
構文
引数
返り値
キーと値のペアを含むマップを返します。Map(Any, Any)
例
使用例
mapAdd
導入バージョン: v20.7
すべてのキーを集約し、それぞれのキーに対応する値を合計します。
構文
引数
arg1[, arg2, ...]— 2 つの配列からなる Map またはタプルであり、1 つ目の配列の要素がキー、2 つ目の配列の要素が各キーに対応する値になります。Map(K, V)またはTuple(Array(T), Array(T))
戻り値
Map またはタプルを返します。1 つ目の配列にはソート済みのキーが含まれ、2 つ目の配列には対応する値が含まれます。Map(K, V) または Tuple(Array(T), Array(T))
例
Map 型での使用例
タプルを使用する場合
mapAll
導入バージョン: v23.4
マップ内のすべてのキーと値のペアに対して、ある条件が成り立つかどうかを判定します。
mapAll は高階関数です。
第1引数としてラムダ関数を渡すことができます。
構文
引数
func— ラムダ関数。Lambda functionmap— 検査対象のマップ。Map(K, V)
返り値
すべてのキーと値のペアが条件を満たす場合は 1、それ以外の場合は 0 を返します。UInt8
例
使用例
mapApply
導入バージョン: v22.3
関数を map の各要素に適用します。
構文
引数
func— ラムダ関数。Lambda functionmap— 関数を適用する対象の Map。Map(K, V)
戻り値
元の Map の各要素に func を適用して得られる新しい Map を返します。Map(K, V)
例
使用例
mapConcat
導入バージョン: v23.4
複数の map を、そのキーの等値性に基づいて連結します。
同じキーを持つ要素が複数の入力 map に存在する場合、すべての要素が結果の map に追加されますが、演算子 [] で参照できるのは最初の要素のみです。
構文
引数
maps— 任意個の Map。Map
返り値
引数として渡された Map を連結した Map を返します。Map
例
使用例
mapContainsKey
導入バージョン: v21.2
マップにキーが含まれているかどうかを判定します。
構文
エイリアス: mapContains
引数
戻り値
マップにキーが含まれていれば 1、含まれていなければ 0 を返します。UInt8
例
使用例
mapContainsKeyLike
導入バージョン: v23.4
マップに、LIKE で指定したパターンに一致するキーが含まれているかを判定します。
構文
引数
map— 検索対象のマップ。Map(K, V)pattern— キーと照合するパターン。const String
戻り値
map に pattern に一致するキーが含まれていれば 1、そうでなければ 0 を返します。UInt8
例
使用例
mapContainsValue
導入バージョン: v25.6
マップに指定した値が含まれているかどうかを判定します。
構文
引数
戻り値
map に値が含まれていれば 1、含まれていなければ 0 を返します。UInt8
例
使用例
mapContainsValueLike
導入バージョン: v25.5
マップに、指定したパターンに対して LIKE マッチする値が含まれているかをチェックします。
構文
引数
map— 検索対象のマップ。Map(K, V)pattern— 値と照合するパターン。const String
戻り値
map に pattern と一致する値が含まれている場合は 1、それ以外は 0 を返します。UInt8
例
使用例
mapExists
導入バージョン: v23.4
マップ内の少なくとも 1 つのキーと値のペアについて、条件が成り立つかどうかをテストします。
mapExists は高階関数です。
第 1 引数としてラムダ関数を渡すことができます。
構文
引数
func— 省略可能。ラムダ関数。Lambda functionmap— チェック対象のマップ。Map(K, V)
返される値
少なくとも 1 つのキーと値の組が条件を満たす場合は 1 を返し、それ以外の場合は 0 を返します。UInt8
例
使用例
mapExtractKeyLike
導入: v23.4
文字列キーを持つ map と LIKE パターンを引数に取り、この関数はキーがそのパターンにマッチする要素のみを含む map を返します。
構文
引数
map— 抽出元となるマップ。Map(K, V)pattern— キーと照合するためのパターン。const String
戻り値
キーが指定したパターンにマッチする要素のみを含むマップを返します。パターンに一致する要素がない場合は、空のマップを返します。Map(K, V)
例
使用例
mapExtractValueLike
導入バージョン: v25.5
文字列値を持つマップと LIKE パターンを指定すると、この関数は値がそのパターンに一致する要素のみを含むマップを返します。
構文
引数
map— 抽出対象とするマップ。Map(K, V)pattern— 値と照合するパターン。const String
戻り値
指定したパターンにマッチする値を持つ要素だけを含むマップを返します。パターンにマッチする要素がない場合は、空のマップが返されます。Map(K, V)
例
使用例
mapFilter
導入バージョン: v22.3
マップの各要素に関数を適用し、その結果に基づいてマップをフィルタリングします。
構文
引数
func— ラムダ関数。Lambda functionmap— フィルタ対象の Map。Map(K, V)
戻り値
func が 0 以外の値を返す要素だけを含む Map を返します。Map(K, V)
例
使用例
mapFromArrays
v23.3 で導入。
キーの配列(またはマップ)と値の配列(またはマップ)からマップを作成します。
この関数は、構文 CAST([...], 'Map(key_type, value_type)') の便利な代替手段です。
構文
別名: MAP_FROM_ARRAYS
引数
戻り値
キー配列および値の配列/マップから構成されるキーと値を持つマップを返します。Map
例
基本的な使い方
map 型を入力とする場合
mapKeys
導入バージョン: v21.2
指定されたマップのキーを返します。
この関数は、設定 optimize_functions_to_subcolumns を有効にすることで最適化できます。
この設定を有効にすると、関数はマップ全体ではなく keys サブカラムだけを読み取ります。
クエリ SELECT mapKeys(m) FROM table は SELECT m.keys FROM table に変換されます。
構文
引数
map— キーを抽出する対象のマップ。Map(K, V)
戻り値
マップ内のすべてのキーを含む配列を返します。Array(T)
例
使用例
mapPartialReverseSort
導入バージョン: v23.4
map の要素を降順にソートし、追加の limit 引数によって先頭の一部だけをソートできます。 func 関数が指定されている場合、map のキーと値に func 関数を適用した結果に基づいてソート順が決まります。
構文
引数
func— 省略可能。ラムダ関数。Lambda functionlimit— 範囲[1..limit]内の要素がソートされます。(U)Int*map— ソート対象のマップ。Map(K, V)
返される値
降順で部分的にソートされたマップを返します。Map(K, V)
例
使用例
mapPartialSort
導入バージョン: v23.4
map の要素を昇順にソートします。追加の limit 引数を指定することで、一部のみを対象とした「部分ソート」が可能です。
func 関数が指定されている場合は、map のキーおよび値に func 関数を適用した結果に基づいてソート順が決定されます。
構文
引数
func— 省略可能。Lambda 関数。Lambda functionlimit— 範囲[1..limit]内の要素がソートされます。(U)Int*map— ソート対象の Map。Map(K, V)
戻り値
部分的にソートされた Map を返します。Map(K, V)
例
使用例
mapPopulateSeries
導入バージョン: v20.10
整数キーを持つマップにおいて、欠けているキーと値のペアを補完します。
既存の最大値より大きいキーも拡張できるように、最大キーを指定できます。
より正確には、この関数は、キーが最小キーから最大キー(指定されている場合は max 引数)までステップ幅 1 の数列を形成し、それに対応する値を持つマップを返します。
あるキーに値が指定されていない場合、そのキーの値としてデフォルト値が使用されます。
キーが重複している場合、先に出現した値のみがそのキーに関連付けられます。
構文
引数
map— 整数キーを持つ Map 型。Map((U)Int*, V)keys— キーの配列。Array(T)values— 値の配列。Array(T)max— オプション。キーの最大値を指定します。Int8またはInt16またはInt32またはInt64またはInt128またはInt256
返される値
ソート済みのキーを持つ Map、または 1 つ目にソート済みのキー、2 つ目に対応する値を持つ 2 つの配列からなるタプルを返します。Map(K, V) または Tuple(Array(UInt*), Array(Any))
例
Map 型を使用する場合
マップされた配列を使う場合
mapReverseSort
導入バージョン: v23.4
map の要素を降順に並べ替えます。
func 関数が指定されている場合、map のキーおよび値に func 関数を適用した結果によってソート順が決まります。
構文
引数
func— オプションのラムダ関数。Lambda functionmap— ソート対象のマップ。Map(K, V)
戻り値
降順にソートされたマップを返します。Map(K, V)
例
使用例
mapSort
Introduced in: v23.4
マップの要素を昇順で並べ替えます。
func 関数が指定されている場合、マップのキーと値に func 関数を適用した結果によってソート順が決まります。
構文
引数
func— 任意。ラムダ関数。Lambda functionmap— ソート対象のマップ。Map(K, V)
戻り値
昇順にソートされたマップを返します。Map(K, V)
例
使用例
mapSubtract
導入バージョン: v20.7
すべてのキーを取得し、対応する値同士の差を計算します。
構文
引数
arg1[, arg2, ...]— 2 つの配列からなる Map またはタプル。1 つ目の配列の要素がキーを表し、2 つ目の配列には各キーに対応する値が含まれます。Map(K, V)またはTuple(Array(T), Array(T))
戻り値
戻り値は 1 つの Map またはタプルで、1 つ目の配列にはソート済みのキーが含まれ、2 つ目の配列には値が含まれます。Map(K, V) または Tuple(Array(T), Array(T))
例
Map 型の場合
タプルマップを使用する場合
mapUpdate
導入バージョン: v22.3
2つのマップを受け取り、2つ目のマップの対応するキーの値で値を更新した1つ目のマップを返します。
構文
引数
返される値
map2 に含まれる同じキーの値で更新された map1 を返します。Map(K, V)
使用例
基本的な使い方
mapValues
導入バージョン: v21.2
指定された map の値を返します。
この関数は、optimize_functions_to_subcolumns の設定を有効にすることで最適化できます。
設定を有効にすると、この関数は map 全体ではなく values サブカラムのみを読み取ります。
クエリ SELECT mapValues(m) FROM table は SELECT m.values FROM table に変換されます。
構文
引数
map— 値を抽出する対象のマップ。Map(K, V)
戻り値
マップ内のすべての値を含む配列を返します。Array(T)
例
使用例