提交 839acc94 编写于 作者: A Artem Konovalov

add russian documentation about functions for working with external dictionaries

上级 7d4ebe57
# Функции для работы с внешними словарями {#ext_dict_functions}
Информация о подключении и настройке внешних словарей смотрите в разделе [Внешние словари](../dicts/external_dicts.md).
Для получения информации по подключению и настройке внешних словарей, читайте [Внешние словари](../dicts/external_dicts.md).
## dictGetUInt8, dictGetUInt16, dictGetUInt32, dictGetUInt64
## dictGet
## dictGetInt8, dictGetInt16, dictGetInt32, dictGetInt64
Получение значения из внешнего словаря
## dictGetFloat32, dictGetFloat64
```
dictGet('dict_name', 'attr_name', id_expr)
dictGetOrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
```
## dictGetDate, dictGetDateTime
**Параметры**
## dictGetUUID
- `dict_name` — Название словаря. [String literal](../syntax.md#syntax-string-literal).
- `attr_name` — Название колонки словаря. [String literal](../syntax.md#syntax-string-literal).
- `id_expr` — Значение ключа. [Expression](../syntax.md#syntax-expressions) Возвращает значение типа [UInt64](../../data_types/int_uint.md) или [Tuple](../../data_types/tuple.md) в зависимости от конфигурации словаря.
- `default_value_expr` — Значение которое возвращается, если словарь не содержит колонку с ключом `id_expr`. [Expression](../syntax.md#syntax-expressions) возвращает значение такого же типа, что и у атрибута `attr_name`.
## dictGetString
`dictGetT('dict_name', 'attr_name', id)`
- получить из словаря dict_name значение атрибута attr_name по ключу id.
`dict_name` и `attr_name` - константные строки.
`id` должен иметь тип UInt64.
Если ключа `id` нет в словаре - вернуть значение по умолчанию, заданное в описании словаря.
**Возвращаемое значение**
## dictGetTOrDefault
- Если ClickHouse успешно обрабатывает атрибут в соотвествии с указаным типом [attribute's data Тип](../dicts/external_dicts_dict_structure.md#ext_dict_structure-attributes), функция возвращает значение атрибута словаря для заданного `id_expr`.
- Если запращиваемого `id_expr` не оказалось в словаре:
`dictGetT('dict_name', 'attr_name', id, default)`
- `dictGet` возвратит содержимое элемента `<null_value>` определенного в настройках словаря.
- `dictGetOrDefault` вернет значение переданного `default_value_expr` параметра.
Аналогично функциям `dictGetT`, но значение по умолчанию берётся из последнего аргумента функции.
ClickHouse бросает исключение, если не может обработать значение атрибута или значение не сопоставимо с типом атрибута.
## dictIsIn
`dictIsIn('dict_name', child_id, ancestor_id)`
- для иерархического словаря dict_name - узнать, находится ли ключ child_id внутри ancestor_id (или совпадает с ancestor_id). Возвращает UInt8.
**Примеры использования**
Создайте файл `ext-dict-text.csv` со следующим содержимым:
```text
1,1
2,2
```
Первая колонка - это `id`, вторая - `c1`
Конфигурация внешнего словаря:
```xml
<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>
<Тип>UInt32</Тип>
<null_value></null_value>
</attribute>
</structure>
<lifetime>0</lifetime>
</dictionary>
</yandex>
```
Выполните запрос:
```sql
SELECT
dictGetOrDefault('ext-dict-test', 'c1', number + 1, toUInt32(number * 10)) AS val,
toТипName(val) AS Тип
FROM system.numbers
LIMIT 3
```
```text
┌─val─┬─Тип───┐
│ 1 │ UInt32 │
│ 2 │ UInt32 │
│ 20 │ UInt32 │
└─────┴────────┘
```
**Читайте так же**
- [External Dictionaries](../dicts/external_dicts.md)
## dictGetHierarchy
`dictGetHierarchy('dict_name', id)`
- для иерархического словаря dict_name - вернуть массив ключей словаря, начиная с id и продолжая цепочкой родительских элементов. Возвращает Array(UInt64).
## dictHas
`dictHas('dict_name', id)`
- проверить наличие ключа в словаре. Возвращает значение типа UInt8, равное 0, если ключа нет и 1, если ключ есть.
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/functions/ext_dict_functions/) <!--hide-->
Проверяет наличие строки с заданным ключом в словаре.
```
dictHas('dict_name', id_expr)
```
**Параметры**
- `dict_name` — Название словаря. [String literal](../syntax.md#syntax-string-literal).
- `id_expr` — Значение ключа. [Expression](../syntax.md#syntax-expressions) возвращает значение типа [UInt64](../../data_types/int_uint.md).
**Возвращаемое значение**
- 0, если ключ не был обнаружен
- 1, если ключ присутствует в словаре
Тип: `UInt8`.
## dictGetHierarchy
Для иерархических словарей, возвращает массив ключей, содержащий ключ `id_expr` и все ключи родительских элементов по цепочке.
```
dictGetHierarchy('dict_name', id_expr)
```
**Параметры**
- `dict_name` — Название словаря. [String literal](../syntax.md#syntax-string-literal).
- `id_expr` — Значение ключа. [Expression](../syntax.md#syntax-expressions) возвращает значение типа [UInt64](../../data_types/int_uint.md).
**Возвращаемое значение**
Иерархию ключей словаря.
Тип: Array(UInt64).
## dictIsIn
Осуществляет проверку - является ли ключ родительским в иерархии словаря.
`dictIsIn ('dict_name', child_id_expr, ancestor_id_expr)`
**Параметры**
- `dict_name` — Название словаря. [String literal](../syntax.md#syntax-string-literal).
- `child_id_expr` — Ключ который должен быть проверен. [Expression](../syntax.md#syntax-expressions) возвращает значение типа [UInt64](../../data_types/int_uint.md).
- `ancestor_id_expr` — Родительский ключ для ключа `child_id_expr`. [Expression](../syntax.md#syntax-expressions) возвращает значение типа [UInt64](../../data_types/int_uint.md).
**Возвращаемое значение**
- 0, если `child_id_expr` не является потомком для `ancestor_id_expr`.
- 1, если `child_id_expr` является потомком для `ancestor_id_expr` или если `child_id_expr` равен `ancestor_id_expr`.
Тип: `UInt8`.
## Другие функции {#ext_dict_functions-other}
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` — Название словаря. [String literal](../syntax.md#syntax-string-literal).
- `attr_name` — Название колонки словаря. [String literal](../syntax.md#syntax-string-literal).
- `id_expr` — Значение ключа. [Expression](../syntax.md#syntax-expressions) возвращает значение типа [UInt64](../../data_types/int_uint.md).
- `default_value_expr` — Значение которое возвращается, если словарь не содержит строку с ключом `id_expr`. [Expression](../syntax.md#syntax-expressions) возвращает значение с таким же типом, что и тип атрибута `attr_name`.
**Возвращаемое значение**
- Если ClickHouse успешно обрабатывает атрибут в соотвествии с указаным типом [attribute's data Тип](../dicts/external_dicts_dict_structure.md#ext_dict_structure-attributes), функция возвращает значение атрибута словаря с заданым ключом `id_expr`.
- Если запращиваемого `id_expr` не оказалось в словаре:
- `dictGet[Тип]` возвратит содержимое элемента `<null_value>` определенного в настройках словаря.
- `dictGet[Тип]OrDefault` вернет значение переданного `default_value_expr` параметра.
ClickHouse бросает исключение, если не может обработать значение атрибута или значение не сопоставимо с типом атрибута
[Исходная статья](https://clickhouse.yandex/docs/en/query_language/functions/ext_dict_functions/) <!--hide-->
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册