Функции для работы со словарями
Для словарей, созданных с помощью DDL-запросов, параметр dict_name должен быть полностью задан, например, <database>.<dict_name>. В противном случае будет использована текущая база данных.
Для информации о подключении и конфигурировании словарей смотрите Словари.
dictGet, dictGetOrDefault, dictGetOrNull
Извлекает значения из словаря.
Аргументы
dict_name— Имя словаря. Строковый литерал.attr_names— Имя столбца словаря, строковый литерал или кортеж имен столбцов, Tuple(строковый литерал).id_expr— Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение типа Tuple в зависимости от конфигурации словаря.default_value_expr— Значения, возвращаемые если словарь не содержит строки с ключомid_expr. Выражение или Tuple(Выражение), возвращающее значение (или значения) в тех типах данных, которые настроены для атрибута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— Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение типа Tuple в зависимости от конфигурации словаря.
Возвращаемое значение
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— Имя столбца словаря, строковый литерал или кортеж имен столбцов, Tuple(строковый литерал).id_expr— Значение ключа. Выражение, возвращающее массив значений типа ключа словаря или значение типа Tuple в зависимости от конфигурации словаря.limit- Максимальная длина для каждого возвращаемого массива значений. При обрезке дочерние узлы имеют приоритет над родительскими узлами, и в противном случае уважает установленный порядок списка для словаря дерева регулярных выражений. Если не указано, длина массива не ограничена.
Возвращаемое значение
-
Если ClickHouse успешно парсит атрибут в тип данных атрибута, как определено в словаре, возвращает массив значений атрибутов словаря, которые соответствуют
id_exprдля каждого атрибута, указанного вattr_names. -
Если в словаре нет ключа, соответствующего
id_expr, то возвращается пустой массив.
ClickHouse выбрасывает исключение, если он не может распарсить значение атрибута или значение не соответствует типу данных атрибута.
Пример
Рассмотрите следующий словарь дерева регулярных выражений:
Получите все совпадающие значения:
Получите до 2 совпадающих значений:
Другие функции
ClickHouse поддерживает специализированные функции, которые конвертируют значения атрибутов словаря в определенный тип данных, независимо от конфигурации словаря.
Функции:
dictGetInt8,dictGetInt16,dictGetInt32,dictGetInt64dictGetUInt8,dictGetUInt16,dictGetUInt32,dictGetUInt64dictGetFloat32,dictGetFloat64dictGetDatedictGetDateTimedictGetUUIDdictGetStringdictGetIPv4,dictGetIPv6
Все эти функции имеют модификацию OrDefault. Например, dictGetDateOrDefault.
Синтаксис:
Аргументы
dict_name— Имя словаря. Строковый литерал.attr_name— Имя столбца словаря. Строковый литерал.id_expr— Значение ключа. Выражение, возвращающее значение типа UInt64 или значение типа Tuple в зависимости от конфигурации словаря.default_value_expr— Значение, возвращаемое, если словарь не содержит строки с ключомid_expr. Выражение, возвращающее значение в том типе данных, который настроен для атрибутаattr_name.
Возвращаемое значение
-
Если ClickHouse успешно парсит атрибут в типе данных атрибута, функции возвращают значение атрибута словаря, соответствующее
id_expr. -
Если в словаре отсутствует запрашиваемый
id_expr, то:dictGet[Type]возвращает содержимое элемента<null_value>, указанного для атрибута в конфигурации словаря.dictGet[Type]OrDefaultвозвращает значение, переданное в качестве параметраdefault_value_expr.
ClickHouse выбрасывает исключение, если он не может распарсить значение атрибута или значение не соответствует типу данных атрибута.