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