メインコンテンツまでスキップ
メインコンテンツまでスキップ

マップ関数

map

key-valueペアからMap(key, value)タイプの値を作成します。

構文

引数

  • key_n — マップエントリのキー。 Mapのキータイプとしてサポートされている任意のタイプ。
  • value_n — マップエントリの値。 Mapの値タイプとしてサポートされている任意のタイプ。

返される値

クエリ:

結果:

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)

引数

  • keysArrayまたは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

返される値

クエリ

結果:

引用符 ' を引用文字として使った場合:

結果:

エスケープシーケンスなしのエスケープシーケンス対応:

結果:

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つの arraystupleです。 最初の配列の項目はキーを表し、2番目の配列は各キーに対する値を含みます。すべてのキー配列は同じタイプである必要があり、すべての値配列は、同じ型(Int64, UInt64 または Float64)に昇格される項目を含む必要があります。 共通の昇格されたタイプが結果配列の型として使用されます。

返される値

  • 引数に応じて、並べ替えられたキーを含む1つのmapまたはtupleが返され、その第二配列には対応する値が含まれます。

Mapタイプのクエリ:

結果:

タプルのクエリ:

結果:

mapSubtract

すべてのキーを収集し、対応する値を引きます。

構文

引数

引数は、map または、2つの arraystupleです。 最初の配列の項目はキーを表し、2番目の配列は各キーに対する値を含みます。すべてのキー配列は同じタイプである必要があり、すべての値配列は、同じ型(Int64, UInt64 または Float64)に昇格される項目を含む必要があります。 共通の昇格されたタイプが結果配列の型として使用されます。

返される値

  • 引数に応じて、並べ替えられたキーを含む1つのmapまたはtupleが返され、その第二配列には対応する値が含まれます。

Mapタイプのクエリ:

結果:

タプルのマップのクエリ:

結果:

mapPopulateSeries

整数キーのマップで欠落しているキー-バリューペアを埋めます。 キーを最大値を超えて拡張できるようにするために、最大キーを指定できます。 より具体的には、この関数は、最小キーから最大キーまで(または指定された場合はmax引数)のキーをステップサイズ1で形成するマップを返し、対応する値も返します。 キーの値が指定されていない場合は、デフォルト値が使用されます。 キーが繰り返される場合は、最初の値のみ(出現順)にそのキーが関連付けられます。

構文

配列引数の場合、各行の keysvalues の要素数は同じでなければなりません。

引数

引数は、Maps または2つの Arrays で、最初の配列と第二の配列には、各キーに対するキーと値が含まれています。

マップ配列:

  • map — 整数キーを持つマップ。 Map

または

返される値

  • 引数に応じて、Mapまたは2つのArraysTuple: ソートされた順序のキー、対応するキーの値。

Mapタイプのクエリ:

結果:

マップ配列によるクエリ:

結果:

mapContains

指定されたキーが指定されたマップに含まれているかどうかを返します。

構文

引数

  • map — マップ。Map
  • key — キー。型は map のキー型と一致しなければなりません。

返される値

  • mapkey を含む場合は 1、含まない場合は 0 を返します。UInt8

クエリ:

結果:

mapKeys

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

この関数は、設定 optimize_functions_to_subcolumns を有効にすることで最適化できます。 設定が有効な場合、この関数はマップ全体ではなく、keys サブカラムのみを読み取ります。 クエリ SELECT mapKeys(m) FROM tableSELECT m.keys FROM table に変換されます。

構文

引数

  • map — マップ。Map

返される値

  • マップからすべてのキーを含む配列。Array

クエリ:

結果:

mapValues

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

この関数は、設定 optimize_functions_to_subcolumns を有効にすることで最適化できます。 設定が有効な場合、この関数はマップ全体ではなく、values サブカラムのみを読み取ります。 クエリ SELECT mapValues(m) FROM tableSELECT 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 関数を適用した結果によって決まります。

構文

引数

  • func – マップのキーと値に適用するオプションの関数。ラムダ関数
  • limit – 範囲内の要素[1..limit]がソートされます。(U)Int
  • map – ソートするマップ。Map

返される値

  • 部分的にソートされたマップ。Map

mapReverseSort([func,], map)

マップの要素を降順にソートします。 func 関数が指定されている場合、ソート順は、マップのキーと値に func 関数を適用した結果によって決まります。

詳しい情報は、関数 arrayReverseSort を参照してください。

mapPartialReverseSort

追加の limit 引数を持ち、降順でマップの要素をソートし、部分的なソートを可能にします。 func 関数が指定されている場合、ソート順は、マップのキーと値に func 関数を適用した結果によって決まります。

構文

引数

  • func – マップのキーと値に適用するオプションの関数。ラムダ関数
  • limit – 範囲内の要素[1..limit]がソートされます。(U)Int
  • map – ソートするマップ。Map

返される値

  • 部分的にソートされたマップ。Map