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

辞書を操作するための関数

注記

DDLクエリで作成された辞書については、dict_name パラメータを <database>.<dict_name> のように完全に指定する必要があります。そうでない場合、現在のデータベースが使用されます。

辞書の接続と構成に関する情報は、辞書を参照してください。

dictGet, dictGetOrDefault, dictGetOrNull

辞書から値を取得します。

引数

  • dict_name — 辞書の名前。 文字列リテラル
  • attr_names — 辞書のカラム名、文字列リテラル、またはカラム名のタプル、タプル文字列リテラル)。
  • id_expr — キー値。 辞書の構成に応じて、辞書キータイプの値またはタプルタイプの値を返す
  • default_value_expr — 辞書にid_exprキーの行が存在しない場合に返される値。タプル)で、attr_names 属性に構成されたデータタイプでの値(または値)を返します。

返される値

  • ClickHouseが属性のデータタイプで属性を正常に解析できた場合、関数は id_expr に対応する辞書属性の値を返します。

  • 辞書にid_exprに対応するキーがない場合:

    • dictGetは、辞書構成の属性に指定された <null_value> 要素の内容を返します。
    • dictGetOrDefaultは、default_value_expr パラメータとして渡された値を返します。
    • dictGetOrNullは、辞書にキーが見つからなかった場合に NULL を返します。

ClickHouseは、属性の値を解析できない場合や、値が属性データタイプと一致しない場合に例外をスローします。

単純キー辞書の例

次の内容を含むテキストファイル ext-dict-test.csv を作成します:

最初のカラムは id、2番目のカラムは c1 です。

辞書を構成します:

クエリを実行します:

複合キー辞書の例

次の内容を含むテキストファイル ext-dict-mult.csv を作成します:

最初のカラムは id、2番目は c1、3番目は c2 です。

辞書を構成します:

クエリを実行します:

範囲キー辞書の例

入力テーブル:

辞書を作成します:

クエリを実行します:

結果:

関連情報

dictHas

辞書にキーが存在するかどうかを確認します。

引数

  • dict_name — 辞書の名前。 文字列リテラル
  • id_expr — キー値。 辞書の構成に応じて、辞書キータイプの値またはタプルタイプの値を返す

返される値

  • キーがない場合は0。UInt8
  • キーがある場合は1。UInt8

dictGetHierarchy

階層型辞書におけるキーのすべての親を含む配列を作成します。

構文

引数

返される値

dictIsIn

辞書内の階層チェーン全体を通じてキーの先祖を確認します。

引数

  • dict_name — 辞書の名前。 文字列リテラル
  • child_id_expr — 確認するキー。UInt64タイプの値を返します。
  • ancestor_id_exprchild_id_exprキーの推定先祖。UInt64タイプの値を返します。

返される値

  • child_id_exprancestor_id_exprの子でない場合は0。UInt8
  • child_id_exprancestor_id_exprの子である場合、またはchild_id_exprancestor_id_exprである場合は1。UInt8

dictGetChildren

最初のレベルの子をインデックスの配列として返します。これは、dictGetHierarchyの逆変換です。

構文

引数

返される値

  • キーの最初のレベルの子供。Array(UInt64)。

以下の階層辞書を考えてみます:

第一レベルの子:

dictGetDescendant

dictGetChildren関数がlevel回再帰的に適用されたかのように、すべての子孫を返します。

構文

引数

  • dict_name — 辞書の名前。 文字列リテラル
  • key — キー値。UInt64タイプの値を返します。
  • level — 階層のレベル。level = 0の場合、すべての子孫を返します。UInt8

返される値

以下の階層辞書を考えてみます:

すべての子孫:

第一レベルの子孫:

dictGetAll

正規表現ツリーディクショナリ内の各キーに一致したすべてのノードの属性値を取得します。

返す値の型が Array(T) になる以外は、dictGet に似た動作をします。

構文

引数

  • dict_name — 辞書の名前。 文字列リテラル
  • attr_names — 辞書のカラム名、文字列リテラル、またはカラム名のタプル、タプル文字列リテラル)。
  • id_expr — キー値。で、辞書キータイプの値の配列またはタプルタイプの値を返します。
  • limit - 各返される値配列の最大長。この制限によって子ノードが親ノードに優先され、それ以外の場合は正規表現ツリーディクショナリの定義されたリスト順序が尊重されます。指定しない場合、配列の長さは無制限です。

返される値

  • ClickHouseが辞書で定義された属性のデータタイプで属性を正常に解析できた場合、attr_names で指定された各属性に対して、id_expr に対応する辞書属性の値の配列を返します。

  • 辞書にid_exprに対応するキーがない場合、空の配列が返されます。

ClickHouseは、属性の値を解析できない場合や、値が属性データタイプと一致しない場合に例外をスローします。

以下の正規表現ツリーディクショナリを考えます:

すべての一致する値を取得:

最大2つの一致する値を取得:

その他の関数

ClickHouseは、辞書属性の値を辞書構成に関係なく特定のデータタイプに変換する特殊な関数をサポートしています。

関数:

  • dictGetInt8, dictGetInt16, dictGetInt32, dictGetInt64
  • dictGetUInt8, dictGetUInt16, dictGetUInt32, dictGetUInt64
  • dictGetFloat32, dictGetFloat64
  • dictGetDate
  • dictGetDateTime
  • dictGetUUID
  • dictGetString
  • dictGetIPv4, dictGetIPv6

これらのすべての関数には OrDefault 修飾子が付いています。例えば、dictGetDateOrDefault

構文:

引数

  • dict_name — 辞書の名前。 文字列リテラル
  • attr_name — 辞書のカラム名。 文字列リテラル
  • id_expr — キー値。 で、UInt64またはタプルタイプの値を返します。
  • default_value_expr — 辞書にid_exprキーの行が存在しない場合に返される値。で、attr_name 属性に対して構成されたデータタイプの値を返します。

返される値

  • ClickHouseが属性のデータタイプで属性を正常に解析できた場合、関数は id_expr に対応する辞書属性の値を返します。

  • 辞書に要求されたid_exprがない場合:

    • dictGet[Type]は、辞書構成の属性に指定された <null_value> 要素の内容を返します。
    • dictGet[Type]OrDefaultは、default_value_expr パラメータとして渡された値を返します。

ClickHouseは、属性の値を解析できない場合や、値が属性データタイプと一致しない場合に例外をスローします。