CREATE DICTIONARY ... Attributes

CREATE DICTIONARY ... Attributes (구조)

ClickHouse Cloud에서 딕셔너리를 사용한다면 DDL 쿼리 방식으로 딕셔너리를 만들고, default 사용자로 딕셔너리를 생성하세요. 또한 지원되는 딕셔너리 소스 목록은 Cloud Compatibility 가이드에서 확인하세요.

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 — 데이터 컬럼. 여러 개의 속성이 있을 수 있어요.

Key

ClickHouse는 다음과 같은 키 타입을 지원해요.

  • 숫자 키. UInt64. <id> 태그 또는 PRIMARY KEY 키워드로 정의돼요.
  • 복합 키(Composite key). 서로 다른 타입의 값 집합. <key> 태그 또는 PRIMARY KEY 키워드로 정의돼요.

XML 구조는 <id> 또는 <key> 중 하나를 포함할 수 있어요. DDL 쿼리는 단일 PRIMARY KEY를 포함해야 합니다.

키를 속성으로 설명해서는 안 돼요.

Numeric Key

타입: UInt64.

구성 예시:

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

구성 필드:

  • name – 키가 있는 컬럼의 이름이에요.

DDL 쿼리의 경우:

CREATE DICTIONARY (
    Id UInt64,
    ...
)
PRIMARY KEY Id
...
  • PRIMARY KEY – 키가 있는 컬럼의 이름이에요.

Composite Key

키는 임의 타입 필드의 tuple일 수 있어요. 이 경우 layout은 반드시 complex_key_hashed 또는 complex_key_cache여야 합니다.

복합 키는 단일 요소로 구성될 수 있어요. 예를 들어 문자열을 키로 사용할 수 있게 해줍니다.

키 구조는 <key> 요소에 설정돼요. 키 필드는 딕셔너리 attributes와 동일한 형식으로 지정됩니다. 예:

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

또는

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

dictGet* 함수에 대한 쿼리의 경우 키로 튜플이 전달돼요. 예: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2)).

복합 키가 단일 속성으로 구성된 경우 키 값을 tuple로 감싸지 않고 직접 전달할 수 있어요. 예를 들어 dictGetString('dict_name', 'attr_name', 'key')와 dictGetString('dict_name', 'attr_name', tuple('key')) 둘 다 유효합니다.

Attributes

구성 예시:

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

구성 필드:

Tag Description Required
name 컬럼 이름이에요. Yes
type ClickHouse 데이터 타입: UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64, UUID, Decimal32, Decimal64, Decimal128, Decimal256, Date, Date32, DateTime, DateTime64, String, Array. ClickHouse는 딕셔너리의 값을 지정된 데이터 타입으로 변환하려고 해요. 예를 들어 MySQL의 경우 필드가 MySQL 소스 테이블에서는 TEXT, VARCHAR, 또는 BLOB일 수 있지만, ClickHouse에서는 String으로 업로드될 수 있어요. Nullable은 현재 Flat, Hashed, ComplexKeyHashed, Direct, ComplexKeyDirect, RangeHashed, Polygon, Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache 딕셔너리에서 지원돼요. IPTrie 딕셔너리에서는 Nullable 타입이 지원되지 않아요. Yes
null_value 존재하지 않는 요소에 대한 기본값이에요. 예시에서는 빈 문자열입니다. NULL 값은 Nullable 타입에서만 사용할 수 있어요(앞 줄의 타입 설명 참조). Yes
expression ClickHouse가 값에 대해 실행하는 표현식이에요. 표현식은 원격 SQL 데이터베이스의 컬럼 이름일 수 있어요. 따라서 원격 컬럼의 별칭을 만드는 데 사용할 수 있습니다. 기본값: 표현식 없음. No
hierarchical true이면 속성이 현재 키의 부모 키 값을 포함해요. Hierarchical Dictionaries를 참고하세요. 기본값: false. No
injective id -> attribute 이미지가 injective인지 보여주는 플래그예요. true이면 ClickHouse가 주입이 있는 딕셔너리에 대한 요청을 GROUP BY 절 뒤에 자동으로 배치할 수 있어요. 보통 그러한 요청의 양을 크게 줄여줍니다. 기본값: false. No
is_object_id 쿼리가 MongoDB 문서에서 ObjectID로 실행되는지 보여주는 플래그예요. 기본값: false.

더 알아보기 (Learn more)