extractKeyValuePairs
導入バージョン: v23.4.0
任意の文字列からキー・バリューのペアを抽出します。文字列はキー・バリューのペア形式に完全に準拠している必要はありません。
ノイズ (例:ログファイル) を含む場合があります。解釈するキー・バリューのペアのフォーマットは、関数の引数を使用して指定する必要があります。
キー・バリューのペアは、キーの後に key_value_delimiter と値が続く形式で構成されます。クォートされたキーと値もサポートされています。キー・バリューのペアは、ペアの区切り文字で区切る必要があります。
構文
extractKeyValuePairs(data, [key_value_delimiter], [pair_delimiter], [quoting_character], [unexpected_quoting_character_strategy])引数
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}状態に遷移し、次の文字から開始します。デフォルト値はPROMOTEです
戻り値
- Map(String, String) 形式の、抽出されたキー・バリューのペア。
例
クエリ:
シンプルな例
arthur :) select extractKeyValuePairs('name:neymar, age:31 team:psg,nationality:brazil') as kv
SELECT extractKeyValuePairs('name:neymar, age:31 team:psg,nationality:brazil') as kv
Query id: f9e0ca6f-3178-4ee2-aa2c-a5517abb9cee
┌クォート文字としてのシングルクォート
arthur :) select extractKeyValuePairs('name:\'neymar\';\'age\':31;team:psg;nationality:brazil,last_key:last_value', ':', ';,', '\'') as kv
SELECT extractKeyValuePairs('name:\'neymar\';\'age\':31;team:psg;nationality:brazil,last_key:last_value', ':', ';,', '\'') as kv
Query id: 0e22bf6b-9844-414a-99dc-32bf647abd5e
┌unexpected_quoting_character_strategy の例:
unexpected_quoting_character_strategy=invalid
SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'INVALID') as kv;┌─kv────────────────┐
│ {'abc':'5'} │
└───────────────────┘SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'INVALID') as kv;┌─kv──┐
│ {} │
└─────┘unexpected_quoting_character_strategy=accept
SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'ACCEPT') as kv;┌─kv────────────────┐
│ {'name"abc':'5'} │
└───────────────────┘SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'ACCEPT') as kv;┌─kv─────────────────┐
│ {'name"abc"':'5'} │
└────────────────────┘unexpected_quoting_character_strategy=promote
SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'PROMOTE') as kv;┌─kv──┐
│ {} │
└─────┘SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'PROMOTE') as kv;┌─kv───────────┐
│ {'abc':'5'} │
└──────────────┘エスケープシーケンス非対応の場合
arthur :) select extractKeyValuePairs('age:a\\x0A\\n\\0') as kv
SELECT extractKeyValuePairs('age:a\\x0A\\n\\0') AS kv
Query id: e9fd26ee-b41f-4a11-b17f-25af6fd5d356
┌構文
extractKeyValuePairs(data, [key_value_delimiter], [pair_delimiter], [quoting_character], [unexpected_quoting_character_strategy])別名: str_to_map, mapFromString
引数
- なし。
戻り値
例
extractKeyValuePairsWithEscaping
導入バージョン: v23.4.0
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\を出力し、事後エスケープしてもそのまま保持されます。
先頭のエスケープシーケンスは、キーではスキップされ、値では無効と見なされます。
エスケープシーケンスのサポートを有効にした場合のエスケープシーケンス
arthur :) select extractKeyValuePairsWithEscaping('age:a\\x0A\\n\\0') as kv
SELECT extractKeyValuePairsWithEscaping('age:a\\x0A\\n\\0') AS kv
Query id: 44c114f0-5658-4c75-ab87-4574de3a1645
┌構文
extractKeyValuePairsWithEscaping(data, [key_value_delimiter], [pair_delimiter], [quoting_character], [unexpected_quoting_character_strategy])引数
- なし。
戻り値
例
map
導入バージョン: v21.1.0
キー・バリューのペアから Map(key, value) 型の値を作成します。
構文
map(key1, value1[, key2, value2, ...])引数
戻り値
キーと値のペアを含む map を返します。Map(Any, Any)
例
使用例
SELECT map('key1', number, 'key2', number * 2) FROM numbers(3){'key1':0,'key2':0}
{'key1':1,'key2':2}
{'key1':2,'key2':4}mapAdd
導入バージョン: v20.7.0
すべてのキーを集め、対応する値を合計します。
構文
mapAdd(arg1[, arg2, ...])引数
arg1[, arg2, ...]— 最初の配列の要素がキーを表し、2 番目の配列に各キーの値が含まれる Map または 2 つの配列からなる Tuple。Map(K, V)またはTuple(Array(T), Array(T))
戻り値
Map、または Tuple を返します。最初の配列にはソートされたキーが、2 番目の配列には値が含まれます。Map(K, V) または Tuple(Array(T), Array(T))
例
Map 型の場合
SELECT mapAdd(map(1, 1), map(1, 1)){1:2}タプル を使う場合
SELECT mapAdd(([toUInt8(1), 2], [1, 1]), ([toUInt8(1), 2], [1, 1]))([1,2],[2,2])mapAll
導入バージョン: v23.4.0
map 内のすべてのキー・バリューの組に対して、条件が成り立つかどうかを判定します。
mapAll は高階関数です。
第 1 引数としてラムダ関数を渡すことができます。
構文
mapAll([func,] map)引数
func— ラムダ関数。Lambda functionmap— 判定対象の Map。Map(K, V)
戻り値
すべてのキー・バリューのペアが条件を満たす場合は 1、そうでない場合は 0 を返します。UInt8
例
使用例
SELECT mapAll((k, v) -> v = 1, map('k1', 1, 'k2', 2))0mapApply
導入バージョン: v22.3.0
mapの各要素に関数を適用します。
構文
mapApply(func, map)引数
func— ラムダ関数。Lambda functionmap— 関数の適用対象となる Map。Map(K, V)
戻り値
元の Map の各要素に func を適用して得られる新しい Map を返します。Map(K, V)
例
使用例
SELECT mapApply((k, v) -> (k, v * 2), map('k1', 1, 'k2', 2)){'k1':2,'k2':4}mapConcat
導入バージョン: v23.4.0
複数の Map 型の値を、キーの一致に基づいて連結します。
同じキーを持つ要素が複数の入力 Map に含まれている場合、それらの要素はすべて結果の Map に追加されますが、[] 演算子でアクセスできるのは最初の要素だけです。
構文
mapConcat(maps)引数
maps— 任意個の map。Map
戻り値
引数として渡された複数の map を連結した map を返します。Map
例
使用例
SELECT mapConcat(map('k1', 'v1'), map('k2', 'v2')){'k1':'v1','k2':'v2'}mapContainsKey
導入バージョン: v21.2.0
map にキーが含まれているかどうかを判定します。
構文
mapContainsKey(map, key)別名: mapContains
引数
戻り値
マップにキーが含まれている場合は 1、含まれていない場合は 0 を返します。UInt8
例
使用例
SELECT mapContainsKey(map('k1', 'v1', 'k2', 'v2'), 'k1')1mapContainsKeyLike
導入バージョン: v23.4.0
map に、LIKE で指定したパターンに一致するキーが含まれているかどうかを判定します。
構文
mapContainsKeyLike(map, pattern)引数
map— 検索対象の Map。Map(K, V)pattern— キーの照合に使用するパターン。const String
戻り値
map に pattern に一致するキーが含まれている場合は 1、それ以外の場合は 0 を返します。UInt8
例
使用例
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});
SELECT mapContainsKeyLike(a, 'a%') FROM tab;┌─mapContainsKeyLike(a, 'a%')─┐
│ 1 │
│ 0 │
└─────────────────────────────┘mapContainsValue
導入バージョン: v25.6.0
map に値が含まれているかどうかを判定します。
構文
mapContainsValue(map, value)引数
戻り値
map にその値が含まれていれば 1、含まれていなければ 0 を返します。 UInt8
例
使用例
SELECT mapContainsValue(map('k1', 'v1', 'k2', 'v2'), 'v1')1mapContainsValueLike
導入バージョン: v25.5.0
map に、指定したパターンに LIKE で一致する値が含まれているかどうかを確認します。
構文
mapContainsValueLike(map, pattern)引数
map— 検索対象の Map。Map(K, V)pattern— 値を照合するためのパターン。const String
戻り値
map に pattern に一致する値が含まれている場合は 1 を返し、そうでない場合は 0 を返します。 UInt8
例
使用例
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});
SELECT mapContainsValueLike(a, 'a%') FROM tab;┌─mapContainsValueLike(a, 'a%')─┐
│ 1 │
│ 0 │
└───────────────────────────────┘mapExists
導入バージョン: v23.4.0
map 内の少なくとも 1 つのキー・バリューの組について、条件が成り立つかどうかを判定します。
mapExists は高階関数です。
第 1 引数としてラムダ関数を渡せます。
構文
mapExists([func,] map)引数
func— 任意。ラムダ関数。Lambda functionmap— チェック対象の Map。Map(K, V)
戻り値
少なくとも 1 つのキー・バリューのペアが条件を満たす場合は 1 を返し、それ以外の場合は 0 を返します。UInt8
例
使用例
SELECT mapExists((k, v) -> v = 1, map('k1', 1, 'k2', 2))1mapExtractKeyLike
導入バージョン: v23.4.0
文字列キーを持つ map と LIKE パターンを指定すると、この関数はキーがそのパターンに一致する要素を含む map を返します。
構文
mapExtractKeyLike(map, pattern)引数
map— 抽出元の Map。Map(K, V)pattern— キーとの照合に使用するパターン。const String
戻り値
キーが指定したパターンに一致する要素を含む map を返します。パターンに一致する要素がない場合は、空の map を返します。Map(K, V)
例
使用例
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});
SELECT mapExtractKeyLike(a, 'a%') FROM tab;┌─mapExtractKeyLike(a, 'a%')─┐
│ {'abc':'abc'} │
│ {} │
└────────────────────────────┘mapExtractValueLike
導入バージョン: v25.5.0
文字列の値を持つ map と LIKE pattern が与えられると、この関数は、値が pattern に一致する要素を含む map を返します。
構文
mapExtractValueLike(map, pattern)引数
map— 抽出元の Map。Map(K, V)pattern— 値の照合に使用するパターン。const String
戻り値
値が指定したパターンに一致する要素を含む map を返します。一致する要素がない場合は、空の map を返します。Map(K, V)
例
使用例
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});
SELECT mapExtractValueLike(a, 'a%') FROM tab;┌─mapExtractValueLike(a, 'a%')─┐
│ {'abc':'abc'} │
│ {} │
└──────────────────────────────┘mapFilter
導入バージョン: v22.3.0
マップの各要素に関数を適用して、マップをフィルタリングします。
構文
mapFilter(func, map)引数
func— ラムダ関数。Lambda functionmap— フィルタリング対象の Map。Map(K, V)
戻り値
func が 0 以外の値を返す要素のみを含む Map を返します。Map(K, V)
例
使用例
SELECT mapFilter((k, v) -> v > 1, map('k1', 1, 'k2', 2)){'k2':2}mapFromArrays
導入バージョン: v23.3.0
キーの配列またはマップと、値の配列またはマップからマップを生成します。
この関数は、CAST([...], 'Map(key_type, value_type)') 構文の便利な代替手段です。
構文
mapFromArrays(keys, values)別名: MAP_FROM_ARRAYS
引数
戻り値
キーの Array と値の Array/Map から構成されるキーと値を持つマップを返します。Map
例
基本的な使い方
SELECT mapFromArrays(['a', 'b', 'c'], [1, 2, 3]){'a':1,'b':2,'c':3}Map型の入力の場合
SELECT mapFromArrays([1, 2, 3], map('a', 1, 'b', 2, 'c', 3)){1:('a',1),2:('b',2),3:('c',3)}mapKeys
導入バージョン: v21.2.0
指定された map のキーを返します。
この関数は、設定 optimize_functions_to_subcolumns を有効にすることで最適化できます。
この設定を有効にすると、関数は map 全体ではなく keys サブカラムのみを読み取ります。
クエリ SELECT mapKeys(m) FROM table は SELECT m.keys FROM table に変換されます。
構文
mapKeys(map)引数
map— キーを抽出する対象の Map。Map(K, V)
戻り値
Map に含まれるすべてのキーを格納した配列を返します。Array(T)
例
使用例
SELECT mapKeys(map('k1', 'v1', 'k2', 'v2'))['k1','k2']mapPartialReverseSort
導入バージョン: v23.4.0
mapの要素を降順にソートし、追加の limit 引数により部分ソートを可能にします。 func 関数が指定されている場合、ソート順は mapのキーと値に func 関数を適用した結果によって決まります。
構文
mapPartialReverseSort([func,] limit, map)引数
func— 省略可能。ラムダ関数。Lambda functionlimit— 範囲[1..limit]の要素がソートされます。(U)Int*map— ソート対象のマップ。Map(K, V)
戻り値
降順で部分的にソートされたマップを返します。Map(K, V)
例
使用例
SELECT mapPartialReverseSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2)){'k1':3,'k3':2,'k2':1}mapPartialSort
導入バージョン: v23.4.0
追加の limit 引数により部分ソートを可能にしつつ、map の要素を昇順にソートします。 func 関数が指定されている場合、ソート順は map のキーと値に func 関数を適用した結果によって決まります。
構文
mapPartialSort([func,] limit, map)引数
func— 任意。ラムダ関数。Lambda functionlimit— 範囲[1..limit]内の要素がソートされます。(U)Int*map— ソート対象の Map。Map(K, V)
戻り値
部分的にソートされた Map を返します。Map(K, V)
例
使用例
SELECT mapPartialSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2)){'k2':1,'k3':2,'k1':3}mapPopulateSeries
導入バージョン: v20.10.0
整数のキーを持つマップで、欠落しているキー・バリューのペアを補完します。
最大値を超えてキーを拡張できるように、最大キーを指定できます。
具体的には、この関数は、キーが最小キーから最大キー (または指定されている場合は max 引数) まで 1 刻みで連続する系列を成し、それに対応する値を持つマップを返します。
キーに対応する値が指定されていない場合は、デフォルト値が使用されます。
キーが重複している場合は、最初の値のみ (出現順) がそのキーに関連付けられます。
構文
mapPopulateSeries(map[, max]) | mapPopulateSeries(keys, values[, max])引数
map— 整数キーを持つ Map。Map((U)Int*, V)keys— キーの Array。Array(T)values— 値の Array。Array(T)max— オプション。キーの最大値。Int8またはInt16またはInt32またはInt64またはInt128またはInt256
戻り値
キーがソート順に並んだ最初の配列と、対応するキーの値を格納した 2 番目の配列からなる Map または 2 つの配列の Tuple を返します。Map(K, V) または Tuple(Array(UInt*), Array(Any))
例
Map 型の場合
SELECT mapPopulateSeries(map(1, 10, 5, 20), 6){1:10,2:0,3:0,4:0,5:20,6:0}マッピングされた配列の場合
SELECT mapPopulateSeries([1, 2, 4], [11, 22, 44], 5)([1,2,3,4,5],[11,22,0,44,0])mapReverseSort
導入バージョン: v23.4.0
mapの要素を降順にソートします。 func 関数が指定されている場合、ソート順は map のキーと値に func 関数を適用した結果によって決まります。
構文
mapReverseSort([func,] map)引数
戻り値
降順でソートされた Map を返します。Map(K, V)
例
使用例
SELECT mapReverseSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2)){'k1':3,'k3':2,'k2':1}mapSort
導入バージョン: v23.4.0
map の要素を昇順にソートします。
func 関数を指定した場合、ソート順は map のキーと値に func 関数を適用した結果によって決まります。
構文
mapSort([func,] map)引数
戻り値
昇順にソートされた Map を返します。Map(K, V)
例
使用例
SELECT mapSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2)){'k2':1,'k3':2,'k1':3}mapSubtract
導入バージョン: v20.7.0
すべてのキーを収集し、対応する値同士を減算します。
構文
mapSubtract(arg1[, arg2, ...])引数
arg1[, arg2, ...]— 最初の配列の要素がキーを表し、2 番目の配列に各キーの値が含まれる Map、または 2 つの配列からなる Tuple。Map(K, V)またはTuple(Array(T), Array(T))
戻り値
1 つの Map または Tuple を返します。最初の配列にはソートされたキーが、2 番目の配列には値が含まれます。Map(K, V) または Tuple(Array(T), Array(T))
例
Map 型の場合
SELECT mapSubtract(map(1, 1), map(1, 1)){1:0}タプル形式の map を使用
SELECT mapSubtract(([toUInt8(1), 2], [toInt32(1), 1]), ([toUInt8(1), 2], [toInt32(2), 1]))([1,2],[-1,0])mapUpdate
導入バージョン: v22.3.0
2 つの map に対して、2 番目の map の対応するキーの値で 1 番目の map の値を更新した結果を返します。
構文
mapUpdate(map1, map2)引数
戻り値
map2 内の対応するキーの値で更新された map1 を返します。Map(K, V)
例
基本的な使い方
SELECT mapUpdate(map('key1', 0, 'key3', 0), map('key1', 10, 'key2', 10)){'key3':0,'key1':10,'key2':10}mapValues
導入バージョン: v21.2.0
指定したマップの値を返します。
この関数は、設定 optimize_functions_to_subcolumns を有効にすることで最適化できます。
この設定を有効にすると、関数はマップ全体ではなく、values サブカラムのみを読み取ります。
クエリ SELECT mapValues(m) FROM table は SELECT m.values FROM table に変換されます。
Syntax
mapValues(map)引数
map— 値の抽出元となる Map。Map(K, V)
戻り値
map 内のすべての値を含む配列を返します。Array(T)
例
使用例
SELECT mapValues(map('k1', 'v1', 'k2', 'v2'))['v1','v2']