ClickHouse/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md

8.0 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 44 辞書キーとフィールド

辞書キーとフィールド

その <structure> 句クエリで使用できる辞書キーとフィールドを説明します。

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
...

属性は、クエリの本文に記述されています:

  • PRIMARY KEYキー列
  • AttrName AttrTypeデータ列. 複数の属性が存在する可能性があります。

キー

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

  • 数値キー。 UInt64. で定義される。 <id> タグまたは使用 PRIMARY KEY キーワード。
  • 複合キー。 異なる型の値のセット。 タグで定義 <key> または PRIMARY KEY キーワード。

Xmlの構造を含むことができま <id> または <key>. DDL-クエリには単一を含む必要があります PRIMARY KEY.

!!! warning "警告" キーを属性として記述することはできません。

数値キー

タイプ: UInt64.

設定例:

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

設定フィールド:

  • name The name of the column with keys.

DDLクエリの場合:

CREATE DICTIONARY (
    Id UInt64,
    ...
)
PRIMARY KEY Id
...
  • PRIMARY KEY The name of the column with keys.

複合キー

キーはaである場合もあります tuple フィールドの任意のタイプから。 その レイアウト この場合、 complex_key_hashed または complex_key_cache.

!!! tip "ヒント" 複合キーは、単一の要素で構成できます。 これにより、たとえば文字列をキーとして使用することができます。

キー構造は要素に設定されます <key>. キーフィールドは、辞書と同じ形式で指定されます 属性. 例:

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

または

CREATE DICTIONARY (
    field1 String,
    field2 String
    ...
)
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
)

設定フィールド:

タグ 説明 必須
name 列名。 はい。
type ClickHouseデータ型。
ClickHouseは、dictionaryから指定されたデータ型に値をキャストしようとします。 例えば、MySQL、フィールドが TEXT, VARCHAR,または BLOB MySQLソーステーブルでは、次のようにアップロードできます String クリックハウスで
Null可能 サポートされていない。
はい。
null_value 既存の要素以外の既定値。
この例では、空の文字列です。 使用できません NULL この分野で。
はい。
expression そのClickHouseは値に対して実行されます。
式には、リモートSQLデータベースの列名を指定できます。 したがって、リモート列の別名を作成するために使用できます。

デフォルト値:式なし。
いいえ。
hierarchical もし true この属性には、現在のキーの親キーの値が含まれます。 見る 階層辞書.

デフォルト値: false.
いいえ。
injective このフラグは id -> attribute 画像は injective.
もし true、ClickHouseはの後に自動的に置くことができます GROUP BY 句インジェクションを使用した辞書への要求。 通常、そのような要求の量を大幅に削減します。

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

デフォルト値: false.
いいえ。

も参照。

元の記事