辞書を操作するための関数
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
辞書にキーが存在するかどうかを確認します。
引数
返される値
dictGetHierarchy
階層型辞書におけるキーのすべての親を含む配列を作成します。
構文
引数
返される値
- キーの親。Array(UInt64)。
dictIsIn
辞書内の階層チェーン全体を通じてキーの先祖を確認します。
引数
dict_name
— 辞書の名前。 文字列リテラル。child_id_expr
— 確認するキー。式でUInt64タイプの値を返します。ancestor_id_expr
—child_id_expr
キーの推定先祖。式でUInt64タイプの値を返します。
返される値
child_id_expr
がancestor_id_expr
の子でない場合は0。UInt8。child_id_expr
がancestor_id_expr
の子である場合、またはchild_id_expr
がancestor_id_expr
である場合は1。UInt8。
dictGetChildren
最初のレベルの子をインデックスの配列として返します。これは、dictGetHierarchyの逆変換です。
構文
引数
返される値
例
以下の階層辞書を考えてみます:
第一レベルの子:
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は、属性の値を解析できない場合や、値が属性データタイプと一致しない場合に例外をスローします。