Функции для работы со Словарями
Для словарей, созданных с помощью DDL-запросов, параметр dict_name должен быть полностью указан, например, <database>.<dict_name>. В противном случае используется текущая база данных.
Для получения информации о подключении и конфигурации словарей смотрите Словари.
dictGet, dictGetOrDefault, dictGetOrNull
Извлекает значения из словаря.
Аргументы
- dict_name— Название словаря. Строковый литерал.
- attr_names— Название колонки словаря, Строковый литерал, или кортеж названий колонок, Кортеж(Строковый литерал).
- id_expr— Значение ключа. Выражение, возвращающее значение типа ключа словаря или Кортеж-типа в зависимости от конфигурации словаря.
- default_value_expr— Значение, возвращаемое, если словарь не содержит строки с ключом- id_expr. Выражение или Кортеж(Выражение), возвращающее значение (или значения) в типах данных, настроенных для атрибута- attr_names.
Возвращаемое значение
- 
Если ClickHouse успешно разбирает атрибут в типе данных атрибута, функции возвращают значение атрибута словаря, соответствующее id_expr.
- 
Если ключа, соответствующего id_expr, нет в словаре, то:- dictGetвозвращает содержимое элемента- <null_value>, указанного для атрибута в конфигурации словаря.
- dictGetOrDefaultвозвращает значение, переданное в качестве параметра- default_value_expr.
- dictGetOrNullвозвращает- NULL, если ключ не найден в словаре.
 
ClickHouse вызывает исключение, если он не может разобрать значение атрибута или если значение не соответствует типу данных атрибута.
Пример для словаря с простым ключом
Создайте текстовый файл ext-dict-test.csv, содержащий следующее:
Первая колонка — id, вторая колонка — c1.
Настройте словарь:
Выполните запрос:
Пример для словаря с комплексным ключом
Создайте текстовый файл ext-dict-mult.csv, содержащий следующее:
Первая колонка — id, вторая колонка — c1, третья колонка — c2.
Настройте словарь:
Выполните запрос:
Пример для словаря с диапазоном ключей
Исходная таблица:
Создайте словарь:
Выполните запрос:
Результат:
См. также
dictHas
Проверяет, присутствует ли ключ в словаре.
Аргументы
- dict_name— Название словаря. Строковый литерал.
- id_expr— Значение ключа. Выражение, возвращающее значение типа ключа словаря или Кортеж-типа в зависимости от конфигурации словаря.
Возвращаемое значение
dictGetHierarchy
Создает массив, содержащий всех родителей ключа в иерархическом словаре.
Синтаксис
Аргументы
- dict_name— Название словаря. Строковый литерал.
- key— Значение ключа. Выражение, возвращающее значение типа UInt64.
Возвращаемое значение
- Родители для ключа. Array(UInt64).
dictIsIn
Проверяет предка ключа через всю иерархическую цепочку в словаре.
Аргументы
- dict_name— Название словаря. Строковый литерал.
- child_id_expr— Ключ, который необходимо проверить. Выражение, возвращающее значение типа UInt64.
- ancestor_id_expr— Предполагаемый предок ключа- child_id_expr. Выражение, возвращающее значение типа UInt64.
Возвращаемое значение
- 0, если child_id_exprне является потомкомancestor_id_expr. UInt8.
- 1, если child_id_exprявляется потомкомancestor_id_exprилиchild_id_exprявляетсяancestor_id_expr. UInt8.
dictGetChildren
Возвращает потомков первого уровня в виде массива индексов. Это обратное преобразование для dictGetHierarchy.
Синтаксис
Аргументы
- dict_name— Название словаря. Строковый литерал.
- key— Значение ключа. Выражение, возвращающее значение типа UInt64.
Возвращаемые значения
Пример
Рассмотрим иерархический словарь:
Потомки первого уровня:
dictGetDescendant
Возвращает всех потомков, как если бы функция dictGetChildren была применена level раз рекурсивно.
Синтаксис
Аргументы
- dict_name— Название словаря. Строковый литерал.
- key— Значение ключа. Выражение, возвращающее значение типа UInt64.
- level— Уровень иерархии. Если- level = 0, возвращает всех потомков до конца. UInt8.
Возвращаемые значения
Пример
Рассмотрим иерархический словарь:
Все потомки:
Потомки первого уровня:
dictGetAll
Извлекает значения атрибутов всех узлов, которые соответствуют каждому ключу в словаре дерева регулярных выражений.
Помимо возвращения значений типа Array(T) вместо T, эта функция ведет себя аналогично dictGet.
Синтаксис
Аргументы
- dict_name— Название словаря. Строковый литерал.
- attr_names— Название колонки словаря, Строковый литерал, или кортеж названий колонок, Кортеж(Строковый литерал).
- id_expr— Значение ключа. Выражение, возвращающее массив значений типа ключа словаря или Кортеж-типа в зависимости от конфигурации словаря.
- limit- Максимальная длина для каждого возвращаемого массива значений. При усечении дочерние узлы имеют приоритет перед родительскими узлами, и в противном случае соблюдается установленный порядок списка для словаря дерева регулярных выражений. Если не указано, длина массива не ограничена.
Возвращаемое значение
- 
Если ClickHouse успешно разбирает атрибут в типе данных атрибута, как определено в словаре, возвращает массив значений атрибутов словаря, которые соответствуют id_exprдля каждого атрибута, указанногоattr_names.
- 
Если в словаре нет ключа, соответствующего id_expr, возвращается пустой массив.
ClickHouse вызывает исключение, если он не может разобрать значение атрибута или если значение не соответствует типу данных атрибута.
Пример
Рассмотрим следующий словарь дерева регулярных выражений:
Получите все соответствующие значения:
Получите до 2 соответствующих значений:
Другие функции
ClickHouse поддерживает специализированные функции, которые преобразуют значения атрибутов словаря в определенный тип данных независимо от конфигурации словаря.
Функции:
- dictGetInt8,- dictGetInt16,- dictGetInt32,- dictGetInt64
- dictGetUInt8,- dictGetUInt16,- dictGetUInt32,- dictGetUInt64
- dictGetFloat32,- dictGetFloat64
- dictGetDate
- dictGetDateTime
- dictGetUUID
- dictGetString
- dictGetIPv4,- dictGetIPv6
Все эти функции имеют модификацию OrDefault. Например, dictGetDateOrDefault.
Синтаксис:
Аргументы
- dict_name— Название словаря. Строковый литерал.
- attr_name— Название колонки словаря. Строковый литерал.
- id_expr— Значение ключа. Выражение, возвращающее значение типа UInt64 или Кортеж-типа в зависимости от конфигурации словаря.
- default_value_expr— Значение, возвращаемое, если словарь не содержит строки с ключом- id_expr. Выражение, возвращающее значение в типе данных, настроенном для атрибута- attr_name.
Возвращаемое значение
- 
Если ClickHouse успешно разбирает атрибут в типе данных атрибута, функции возвращают значение атрибута словаря, которое соответствует id_expr.
- 
Если в словаре нет запрашиваемого id_expr, то:- dictGet[Type]возвращает содержимое элемента- <null_value>, указанного для атрибута в конфигурации словаря.
- dictGet[Type]OrDefaultвозвращает значение, переданное в качестве параметра- default_value_expr.
 
ClickHouse вызывает исключение, если он не может разобрать значение атрибута или если значение не соответствует типу данных атрибута.
