メインコンテンツへスキップ
メインコンテンツへスキップ

Dictionary の属性

ヒント

ClickHouse Cloud でディクショナリを使用している場合は、ディクショナリの作成に DDL クエリオプションを使用し、ユーザー default でディクショナリを作成してください。 また、Cloud 互換性ガイド でサポートされているディクショナリソースの一覧を確認してください。

structure 句は、クエリで利用できる Dictionary のキーとフィールドを定義します。

XML による定義:

<dictionary>
    <structure>
        <id>
            <name>Id</name>
        </id>

        <attribute>
            <!-- Attribute parameters -->
        </attribute>

        ...

    </structure>
</dictionary>

属性は、次の要素で定義されます:

  • <id> — キーカラム
  • <attribute> — データカラム: 属性を複数定義できます。

DDLクエリ:

CREATE DICTIONARY dict_name (
    Id UInt64,
    -- attributes
)
PRIMARY KEY Id
...

Attributes are described in the クエリ本体で定義します:

  • PRIMARY KEY — キーとなるカラム
  • AttrName AttrType — データ カラム。属性は複数指定できます。

キー

ClickHouse は次の種類のキーをサポートします:

  • 数値キー。型は UInt64<id> タグ内、または PRIMARY KEY キーワードを使って定義します。
  • 複合キー。異なる型の値の Set。<key> タグ内、または PRIMARY KEY キーワードを使って定義します。

XML 構造では <id><key> のいずれか一方のみを含めることができます。DDL クエリでは PRIMARY KEY を 1 つだけ指定しなければなりません。

注記

キーを属性として定義してはいけません。

数値キー

型: UInt64

設定例:

<id>
    <name>Id</name>
</id>

構成フィールド:

  • name – キーを持つカラムの名前。

DDL クエリの場合:

CREATE DICTIONARY (
    Id UInt64,
    ...
)
PRIMARY KEY Id
...
  • PRIMARY KEY – キーを格納するカラム名。

複合キー

キーには、任意の型のフィールドからなる tuple を使用できます。この場合のレイアウトcomplex_key_hashed または complex_key_cache でなければなりません。

ヒント

複合キーは 1 要素のみから構成することもできます。その場合、例えば文字列をキーとして使用できます。

キー構造は <key> 要素内で設定します。キー フィールドは、Dictionary の属性と同じ形式で指定します。例:

<structure>
    <key>
        <attribute>
            <name>field1</name>
            <type>String</type>
        </attribute>
        <attribute>
            <name>field2</name>
            <type>UInt32</type>
        </attribute>
        ...
    </key>
...

または

CREATE DICTIONARY (
    field1 String,
    field2 UInt32
    ...
)
PRIMARY KEY field1, field2
...

dictGet* 関数に対するクエリでは、タプルがキーとして渡されます。例: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2))

属性

設定例:

<structure>
    ...
    <attribute>
        <name>Name</name>
        <type>ClickHouseDataType</type>
        <null_value></null_value>
        <expression>rand64()</expression>
        <hierarchical>true</hierarchical>
        <injective>true</injective>
        <is_object_id>true</is_object_id>
    </attribute>
</structure>

または

CREATE DICTIONARY somename (
    Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID
)

設定項目:

TagDescriptionRequired
nameカラム名。Yes
typeClickHouse のデータ型: UInt8UInt16UInt32UInt64Int8Int16Int32Int64Float32Float64UUIDDecimal32Decimal64Decimal128Decimal256DateDate32DateTimeDateTime64StringArray
ClickHouse は Dictionary に格納された値を、指定されたデータ型にキャストしようとします。たとえば、MySQL では MySQL のソーステーブルにおいてフィールドが TEXTVARCHARBLOB のいずれかであっても、ClickHouse には String として取り込めます。
Nullable は現在、FlatHashedComplexKeyHashedDirectComplexKeyDirectRangeHashed、Polygon、CacheComplexKeyCacheSSDCacheSSDComplexKeyCache Dictionary でサポートされています。IPTrie Dictionary では Nullable 型はサポートされていません。
Yes
null_value存在しない要素に対するデフォルト値。
この例では空文字列です。NULL 値は Nullable 型に対してのみ使用できます(前の行の型の説明を参照してください)。
Yes
expressionClickHouse が値に対して実行する
この式は、リモート SQL データベース内のカラム名である場合があります。そのため、リモートのカラムに対するエイリアスを作成するために使用できます。

デフォルト値: 式なし。
No
hierarchicaltrue の場合、その属性には現在のキーに対する親キーの値が含まれます。Hierarchical Dictionaries を参照してください。

デフォルト値: false
No
injectiveid -> attribute の写像が単射であるかどうかを示すフラグ。
true の場合、ClickHouse は単射である Dictionary へのリクエストを GROUP BY 句の後ろに自動的に挿入できます。通常、これによりそのようなリクエストの数を大幅に削減できます。

デフォルト値: false
No
is_object_idクエリが ObjectID による MongoDB ドキュメントに対して実行されるかどうかを示すフラグ。

デフォルト値: false