ClickHouse/docs/ru/query_language/functions/ext_dict_functions.md
2019-07-19 00:42:48 +03:00

8.9 KiB
Raw Blame History

Функции для работы с внешними словарями

Для получения информации о подключении и настройке, читайте раздел про внешние словари.

dictGet

Получение значения из внешнего словаря.

dictGet('dict_name', 'attr_name', id_expr)
dictGetOrDefault('dict_name', 'attr_name', id_expr, default_value_expr)

Параметры

  • dict_name — Название словаря. Строковый литерал.
  • attr_name — Название колонки словаря. Строковый литерал.
  • id_expr — Значение ключа. Выражение возвращает значение типа UInt64 или Tuple в зависимости от конфигурации словаря.
  • default_value_expr — Значение которое возвращается, если словарь не содержит колонку с ключом id_expr. Выражение возвращает значение такого же типа, что и у атрибута attr_name.

Возвращаемое значение

  • Если ClickHouse успешно обрабатывает атрибут в соотвествии с указаным типом данных, то функция возвращает значение для заданного ключа id_expr.

  • Если запрашиваемого id_expr не оказалось в словаре:

    • dictGet возвратит содержимое элемента <null_value> определенного в настройках словаря.
    • dictGetOrDefault вернет значение переданного default_value_expr параметра.

ClickHouse бросает исключение, если не может обработать значение атрибута или значение несопоставимо с типом атрибута.

Пример использования

Создайте файл ext-dict-text.csv со следующим содержимым:

1,1
2,2

Первая колонка - это id, вторая - c1

Конфигурация внешнего словаря:

<yandex>
    <dictionary>
        <name>ext-dict-test</name>
        <source>
            <file>
                <path>/path-to/ext-dict-test.csv</path>
                <format>CSV</format>
            </file>
        </source>
        <layout>
            <flat />
        </layout>
        <structure>
            <id>
                <name>id</name>
            </id>
            <attribute>
                <name>c1</name>
                <type>UInt32</type>
                <null_value></null_value>
            </attribute>
        </structure>
        <lifetime>0</lifetime>
    </dictionary>
</yandex>

Выполните запрос:

SELECT
    dictGetOrDefault('ext-dict-test', 'c1', number + 1, toUInt32(number * 10)) AS val,
    toТипName(val) AS Type
FROM system.numbers
LIMIT 3
┌─val─┬─type───┐
│   1 │ UInt32 │
│   2 │ UInt32 │
│  20 │ UInt32 │
└─────┴────────┘

Смотрите также

dictHas

Проверяет наличие записи с заданным ключом в словаре.

dictHas('dict_name', id_expr)

Параметры

Возвращаемое значение

  • 0, если ключ не был обнаружен
  • 1, если ключ присутствует в словаре

Тип: UInt8.

dictGetHierarchy

Для иерархических словарей возвращает массив ключей, содержащий ключ id_expr и все ключи родительских элементов по цепочке.

dictGetHierarchy('dict_name', id_expr)

Параметры

Возвращаемое значение

Иерархию ключей словаря.

Тип: Array(UInt64).

dictIsIn

Осуществляет проверку - является ли ключ родительским во всей иерархической цепочке словаря.

dictIsIn ('dict_name', child_id_expr, ancestor_id_expr)

Параметры

Возвращаемое значение

  • 0, если child_id_expr не является потомком для ancestor_id_expr.
  • 1, если child_id_expr является потомком для ancestor_id_expr или если child_id_expr равен ancestor_id_expr.

Тип: UInt8.

Другие функции

ClickHouse поддерживает специализированные функции для конвертации значений атрибутов словаря к определенному типу, независимо от настроек словаря.

Функции:

  • dictGetInt8, dictGetInt16, dictGetInt32, dictGetInt64
  • dictGetUInt8, dictGetUInt16, dictGetUInt32, dictGetUInt64
  • dictGetFloat32, dictGetFloat64
  • dictGetDate
  • dictGetDateTime
  • dictGetUUID
  • dictGetString

Все эти функции имеют так же OrDefault версию. Например, dictGetDateOrDefault.

Синтаксис:

dictGet[Тип]('dict_name', 'attr_name', id_expr)
dictGet[Тип]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr)

Параметры

  • dict_name — Название словаря. Строковый литерал.
  • attr_name — Название колонки словаря. Строковый литерал.
  • id_expr — Значение ключа. Выражение возвращает значение типа UInt64.
  • default_value_expr — Значение которое возвращается, если словарь не содержит строку с ключом id_expr. Выражение возвращает значение с таким же типом, что и тип атрибута attr_name.

Возвращаемое значение

  • Если ClickHouse успешно обрабатывает атрибут в соотвествии с указаным типом данных,то функция возвращает значение для заданного ключа id_expr.

  • Если запрашиваемого id_expr не оказалось в словаре:

    • dictGet[Тип] возвратит содержимое элемента <null_value> определенного в настройках словаря.
    • dictGet[Тип]OrDefault вернет значение переданного default_value_expr параметра.

ClickHouse бросает исключение, если не может обработать значение атрибута или значение несопоставимо с типом атрибута

Оригинальная статья