マップ関数
map
key-valueペアからMap(key, value)タイプの値を作成します。
構文
引数
返される値
key:value
ペアを含むマップ。 Map(key, value)。
例
クエリ:
結果:
mapFromArrays
キーの配列またはマップと値の配列またはマップからマップを作成します。
この関数は、構文 CAST([...], 'Map(key_type, value_type)')
の便利な代替手段です。
例えば、以下のように書く代わりに
CAST((['aa', 'bb'], [4, 5]), 'Map(String, UInt32)')
、またはCAST([('aa',4), ('bb',5)], 'Map(String, UInt32)')
次のように書くことができます。 mapFromArrays(['aa', 'bb'], [4, 5])
。
構文
エイリアス: MAP_FROM_ARRAYS(keys, values)
引数
keys
— ArrayまたはMapからマップを作成するためのキーの配列またはマップ。keys
が配列の場合、NULL値を含まない限り、そのタイプとしてArray(Nullable(T))
またはArray(LowCardinality(Nullable(T)))
を受け入れます。values
- ArrayまたはMapからマップを作成するための値の配列またはマップ。
返される値
- キー配列と値配列/マップから構築されたマップ。
例
クエリ:
結果:
mapFromArrays
は、Mapタイプの引数も受け入れます。これらは、実行時にタプルの配列にキャストされます。
結果:
結果:
extractKeyValuePairs
キーと値のペアの文字列をMap(String, String)に変換します。 解析はノイズ(例:ログファイル)に対して耐性があります。 入力文字列のキー-バリューペアは、キーの後にキー-バリュー区切り文字が続き、その後に値が続きます。 キー-バリューペアはペアの区切りで分けられます。 キーと値は引用符で囲むことができます。
構文
エイリアス:
str_to_map
mapFromString
引数
data
- キー-バリューペアを抽出するための文字列。String または FixedString。key_value_delimiter
- キーと値を区切る単一文字。デフォルトは:
。 String または FixedString。pair_delimiters
- ペアを区切る文字のセット。デフォルトは,
および;
。 String または FixedString。quoting_character
- 引用符キャラクターとして使う単一文字。デフォルトは"
。 String または FixedString。
返される値
- キー-バリューペアの配列。タイプ: Map(String, String)
例
クエリ
結果:
引用符 '
を引用文字として使った場合:
結果:
エスケープシーケンスなしのエスケープシーケンス対応:
結果:
toString
でシリアライズされたマップ文字列のキー-バリューペアを復元するには:
結果:
extractKeyValuePairsWithEscaping
extractKeyValuePairs
と同じですが、エスケープのサポートがあります。
サポートされているエスケープシーケンス: \x
, \N
, \a
, \b
, \e
, \f
, \n
, \r
, \t
, \v
および \0
。
非標準のエスケープシーケンスは、そのままの形(バックスラッシュを含む)で返されますが、以下のいずれかの場合を除きます: \\
, '
, "
, バックティック
, /
, =
または ASCII 制御文字 (c <= 31)。
この関数は、事前のエスケープおよび後のエスケープが適さない使用ケースを満たします。
例えば、次の入力文字列を考えます: a: "aaaa\"bbb"
。期待される出力は: a: aaaa\"bbbb
です。
- 事前エスケープ: 事前エスケープすると出力は:
a: "aaaa"bbb
となり、extractKeyValuePairs
の出力は:a: aaaa
。 - 後エスケープ:
extractKeyValuePairs
の出力はa: aaaa\
となり、後エスケープはそのままです。
キー内の先頭エスケープシーケンスはスキップされ、値に対して無効とみなされます。
例
エスケープシーケンスのサポートがオンになっている場合のエスケープシーケンス:
結果:
mapAdd
すべてのキーを収集し、対応する値を合計します。
構文
引数
引数は、map または、2つの arrays のtupleです。 最初の配列の項目はキーを表し、2番目の配列は各キーに対する値を含みます。すべてのキー配列は同じタイプである必要があり、すべての値配列は、同じ型(Int64, UInt64 または Float64)に昇格される項目を含む必要があります。 共通の昇格されたタイプが結果配列の型として使用されます。
返される値
例
Map
タイプのクエリ:
結果:
タプルのクエリ:
結果:
mapSubtract
すべてのキーを収集し、対応する値を引きます。
構文
引数
引数は、map または、2つの arrays のtupleです。 最初の配列の項目はキーを表し、2番目の配列は各キーに対する値を含みます。すべてのキー配列は同じタイプである必要があり、すべての値配列は、同じ型(Int64, UInt64 または Float64)に昇格される項目を含む必要があります。 共通の昇格されたタイプが結果配列の型として使用されます。
返される値
例
Map
タイプのクエリ:
結果:
タプルのマップのクエリ:
結果:
mapPopulateSeries
整数キーのマップで欠落しているキー-バリューペアを埋めます。
キーを最大値を超えて拡張できるようにするために、最大キーを指定できます。
より具体的には、この関数は、最小キーから最大キーまで(または指定された場合はmax
引数)のキーをステップサイズ1で形成するマップを返し、対応する値も返します。
キーの値が指定されていない場合は、デフォルト値が使用されます。
キーが繰り返される場合は、最初の値のみ(出現順)にそのキーが関連付けられます。
構文
配列引数の場合、各行の keys
と values
の要素数は同じでなければなりません。
引数
引数は、Maps または2つの Arrays で、最初の配列と第二の配列には、各キーに対するキーと値が含まれています。
マップ配列:
map
— 整数キーを持つマップ。 Map。
または
keys
— キーの配列。 Array(Int)。values
— 値の配列。 Array(Int)。max
— 最大キー値。オプション。Int8, Int16, Int32, Int64, Int128, Int256。
返される値
例
Map
タイプのクエリ:
結果:
マップ配列によるクエリ:
結果:
mapContains
指定されたキーが指定されたマップに含まれているかどうかを返します。
構文
引数
map
— マップ。Map。key
— キー。型はmap
のキー型と一致しなければなりません。
返される値
map
がkey
を含む場合は1
、含まない場合は0
を返します。UInt8。
例
クエリ:
結果:
mapKeys
指定されたマップのキーを返します。
この関数は、設定 optimize_functions_to_subcolumns を有効にすることで最適化できます。
設定が有効な場合、この関数はマップ全体ではなく、keys サブカラムのみを読み取ります。
クエリ SELECT mapKeys(m) FROM table
は SELECT m.keys FROM table
に変換されます。
構文
引数
map
— マップ。Map。
返される値
- マップからすべてのキーを含む配列。Array。
例
クエリ:
結果:
mapValues
指定されたマップの値を返します。
この関数は、設定 optimize_functions_to_subcolumns を有効にすることで最適化できます。
設定が有効な場合、この関数はマップ全体ではなく、values サブカラムのみを読み取ります。
クエリ SELECT mapValues(m) FROM table
は SELECT m.values FROM table
に変換されます。
構文
引数
map
— マップ。Map。
返される値
- マップからすべての値を含む配列。Array。
例
クエリ:
結果:
mapContainsKeyLike
構文
引数
map
— マップ。Map。pattern
- 一致する文字列パターン。
返される値
- 指定されたパターンに似たキーが
map
に含まれている場合は1
、そうでない場合は0
。
例
クエリ:
結果:
mapExtractKeyLike
文字列キーのマップを与えられた場合とLIKEパターンを指定すると、この関数は、キーがパターンに一致する要素を含むマップを返します。
構文
引数
map
— マップ。Map。pattern
- 一致する文字列パターン。
返される値
- 指定されたパターンに一致するキーを持つ要素を含むマップ。要素がパターンに一致しない場合、空のマップが返されます。
例
クエリ:
結果:
mapApply
マップの各要素に関数を適用します。
構文
引数
返される値
- 元のマップから得られるマップを返します。これは、各要素に対して
func(map1[i], ..., mapN[i])
の適用によって得られます。
例
クエリ:
結果:
mapFilter
マップの各要素に関数を適用して、マップをフィルタリングします。
構文
引数
返される値
func(map1[i], ..., mapN[i])
が 0 以外の何かを返すマップの要素のみを含むマップを返します。
例
クエリ:
結果:
mapUpdate
構文
引数
返される値
map2
の対応するキーに対して値が更新されたmap1
を返します。
例
クエリ:
結果:
mapConcat
キーの等価性に基づいて複数のマップを結合します。
同じキーを持つ要素が複数の入力マップに存在する場合、すべての要素が結果マップに追加されますが、オペレーター []
を介してアクセスできるのは最初のものだけです。
構文
引数
maps
– 任意の数のMaps。
返される値
- 引数として渡された結合したマップを持つマップを返します。
例
クエリ:
結果:
クエリ:
結果:
mapExists([func,], map)
map
に少なくとも 1 つのキー-バリュー ペアが存在し、func(key, value)
が 0 以外の何かを返す場合は 1 を返します。そうでなければ 0 を返します。
mapExists
は高階関数です。
最初の引数にラムダ関数を渡すことができます。
例
クエリ:
結果:
mapAll([func,] map)
すべてのキー-バリューペアに対して、func(key, value)
が 0 以外の何かを返す場合は 1 を返します。そうでなければ 0 を返します。
mapAll
は高階関数です。
最初の引数にラムダ関数を渡すことができます。
例
クエリ:
結果:
mapSort([func,], map)
マップの要素を昇順にソートします。
func
関数が指定されている場合、ソート順は、マップのキーと値に func
関数を適用した結果によって決まります。
例
詳細については、arraySort
関数のリファレンスをご覧ください。
mapPartialSort
追加の limit
引数を使って、マップの要素を昇順にソートし、部分的なソートを可能にします。
func
関数が指定されている場合、ソート順は、マップのキーと値に func
関数を適用した結果によって決まります。
構文
引数
返される値
- 部分的にソートされたマップ。Map。
例
mapReverseSort([func,], map)
マップの要素を降順にソートします。
func
関数が指定されている場合、ソート順は、マップのキーと値に func
関数を適用した結果によって決まります。
例
詳しい情報は、関数 arrayReverseSort を参照してください。
mapPartialReverseSort
追加の limit
引数を持ち、降順でマップの要素をソートし、部分的なソートを可能にします。
func
関数が指定されている場合、ソート順は、マップのキーと値に func
関数を適用した結果によって決まります。
構文
引数
返される値
- 部分的にソートされたマップ。Map。
例