Перейти к основному содержанию
Перейти к основному содержанию

CREATE DICTIONARY

Создает новый словарь с указанными структурой, источником, схемой размещения и временем жизни.

Синтаксис

CREATE [OR REPLACE] DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster]
(
    key1 type1  [DEFAULT|EXPRESSION expr1] [IS_OBJECT_ID],
    key2 type2  [DEFAULT|EXPRESSION expr2],
    attr1 type2 [DEFAULT|EXPRESSION expr3] [HIERARCHICAL|INJECTIVE],
    attr2 type2 [DEFAULT|EXPRESSION expr4] [HIERARCHICAL|INJECTIVE]
)
PRIMARY KEY key1, key2
SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN]))
LAYOUT(LAYOUT_NAME([param_name param_value]))
LIFETIME({MIN min_val MAX max_val | max_val})
SETTINGS(setting_name = setting_value, setting_name = setting_value, ...)
COMMENT 'Комментарий'

Структура словаря включает атрибуты. Атрибуты словаря задаются так же, как столбцы таблицы. Единственным обязательным свойством атрибута является его тип, все остальные свойства могут иметь значения по умолчанию.

Конструкция ON CLUSTER позволяет создавать словарь на кластере, см. Distributed DDL.

В зависимости от layout словаря один или несколько атрибутов могут использоваться в качестве ключей словаря.

ИСТОЧНИК

Источником словаря может быть:

  • таблица в текущем сервисе ClickHouse
  • таблица в удалённом сервисе ClickHouse
  • файл, доступный по HTTP(S)
  • другая база данных

Создайте словарь из таблицы в текущем сервисе ClickHouse

Входная таблица source_table:

┌─id─┬─value──┐
│  1 │ Первый  │
│  2 │ Второй │
└────┴────────┘

Создание справочника:

CREATE DICTIONARY id_value_dictionary
(
    id UInt64,
    value String
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'source_table'))
LAYOUT(FLAT())
LIFETIME(MIN 0 MAX 1000)

Выведите словарь:

SHOW CREATE DICTIONARY id_value_dictionary;
CREATE DICTIONARY default.id_value_dictionary
(
    `id` UInt64,
    `value` String
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'source_table'))
LIFETIME(MIN 0 MAX 1000)
LAYOUT(FLAT())
Примечание

При использовании SQL-консоли в ClickHouse Cloud при создании словаря необходимо указать пользователя (default или любого другого пользователя с ролью default_role) и пароль.

CREATE USER IF NOT EXISTS clickhouse_admin
IDENTIFIED WITH sha256_password BY 'passworD43$x';

GRANT default_role TO clickhouse_admin;

CREATE DATABASE foo_db;

CREATE TABLE foo_db.source_table (
    id UInt64,
    value String
) ENGINE = MergeTree
PRIMARY KEY id;

CREATE DICTIONARY foo_db.id_value_dictionary
(
    id UInt64,
    value String
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'source_table' USER 'clickhouse_admin' PASSWORD 'passworD43$x' DB 'foo_db' ))
LAYOUT(FLAT())
LIFETIME(MIN 0 MAX 1000);

Создание словаря из таблицы в удалённом сервисе ClickHouse

Входная таблица (в удалённом сервисе ClickHouse) source_table:

┌─id─┬─value──┐
│  1 │ Первый  │
│  2 │ Второй │
└────┴────────┘

Создание словаря:

CREATE DICTIONARY id_value_dictionary
(
    id UInt64,
    value String
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(HOST 'HOSTNAME' PORT 9000 USER 'default' PASSWORD 'PASSWORD' TABLE 'source_table' DB 'default'))
LAYOUT(FLAT())
LIFETIME(MIN 0 MAX 1000)

Создать словарь из файла, доступного по HTTP(S)

CREATE DICTIONARY default.taxi_zone_dictionary
(
    `LocationID` UInt16 DEFAULT 0,
    `Borough` String,
    `Zone` String,
    `service_zone` String
)
PRIMARY KEY LocationID
SOURCE(HTTP(URL 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv' FORMAT 'CSVWithNames'))
LIFETIME(MIN 0 MAX 0)
LAYOUT(HASHED())

Создание словаря на основе другой базы данных

Подробности см. в разделе Источники словарей.

См. также