ext-dict-functions.md 9.7 KB
Newer Older
1 2
---
toc_priority: 58
3
toc_title: "Функции для работы с внешними словарями"
4 5
---

6
# Функции для работы с внешними словарями {#ext_dict_functions}
7

8
Информацию о подключении и настройке внешних словарей смотрите в разделе [Внешние словари](../../sql-reference/dictionaries/external-dictionaries/external-dicts.md).
9

10
## dictGet {#dictget}
11

12
Извлекает значение из внешнего словаря.
13

14
``` sql
15 16 17
dictGet('dict_name', 'attr_name', id_expr)
dictGetOrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
```
18

19
**Параметры**
20

21 22
-   `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
-   `attr_name` — имя столбца словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
23
-   `id_expr` — значение ключа словаря. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../sql-reference/functions/ext-dict-functions.md) или [Tuple](../../sql-reference/functions/ext-dict-functions.md) в зависимости от конфигурации словаря.
24
-   `default_value_expr` — значение, возвращаемое в том случае, когда словарь не содержит строки с заданным ключом `id_expr`. [Выражение](../syntax.md#syntax-expressions) возвращающее значение с типом данных, сконфигурированным для атрибута `attr_name`.
25

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

28
-   Значение атрибута, соответствующее ключу `id_expr`, если ClickHouse смог привести это значение к [заданному типу данных](../../sql-reference/functions/ext-dict-functions.md#ext_dict_structure-attributes).
29

30 31 32 33
-   Если ключа, соответствующего `id_expr` в словаре нет, то:

    -   `dictGet` возвращает содержимое элемента `<null_value>`, указанного для атрибута в конфигурации словаря.
    -   `dictGetOrDefault` возвращает атрибут `default_value_expr`.
34

35
Если значение атрибута не удалось обработать или оно не соответствует типу данных атрибута, то ClickHouse генерирует исключение.
36

37
**Пример**
38

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

41
``` text
42 43 44 45 46 47 48 49
1,1
2,2
```

Первый столбец — `id`, второй столбец — `c1`.

Настройка внешнего словаря:

50
``` xml
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
<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>
```

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

80
``` sql
81 82 83 84 85 86 87
SELECT
    dictGetOrDefault('ext-dict-test', 'c1', number + 1, toUInt32(number * 10)) AS val,
    toTypeName(val) AS type
FROM system.numbers
LIMIT 3
```

88
``` text
89 90 91 92 93 94 95 96 97
┌─val─┬─type───┐
│   1 │ UInt32 │
│   2 │ UInt32 │
│  20 │ UInt32 │
└─────┴────────┘
```

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

98
-   [Внешние словари](../../sql-reference/functions/ext-dict-functions.md)
99

100
## dictHas {#dicthas}
101

B
BayoNet 已提交
102
Проверяет, присутствует ли запись с указанным ключом в словаре.
103

104
``` sql
105 106 107 108 109
dictHas('dict_name', id)
```

**Параметры**

110
-   `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
D
Denis Zhuravlev 已提交
111
-   `id_expr` — значение ключа словаря. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../sql-reference/functions/ext-dict-functions.md) или [Tuple](../../sql-reference/functions/ext-dict-functions.md) в зависимости от конфигурации словаря.
112 113 114

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

115 116
-   0, если ключа нет.
-   1, если ключ есть.
117 118 119

Тип — `UInt8`.

120
## dictGetHierarchy {#dictgethierarchy}
121

122
Создаёт массив, содержащий цепочку предков для заданного ключа в [иерархическом словаре](../dictionaries/external-dictionaries/external-dicts-dict-hierarchical.md).
123 124

**Синтаксис**
125

126
``` sql
127
dictGetHierarchy('dict_name', key)
128 129 130 131
```

**Параметры**

132
-   `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
133
-   `key` — значение ключа. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../sql-reference/functions/ext-dict-functions.md).
134 135 136

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

137
-   Цепочка предков заданного ключа.
138

139
Type: [Array(UInt64)](../../sql-reference/functions/ext-dict-functions.md).
140

141
## dictIsIn {#dictisin}
142

B
BayoNet 已提交
143
Проверяет предка ключа по всей иерархической цепочке словаря.
144 145 146 147 148

`dictIsIn ('dict_name', child_id_expr, ancestor_id_expr)`

**Параметры**

149
-   `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
150 151
-   `child_id_expr` — ключ для проверки. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../sql-reference/functions/ext-dict-functions.md).
-   `ancestor_id_expr` — предполагаемый предок ключа `child_id_expr`. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../sql-reference/functions/ext-dict-functions.md).
152 153 154

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

155 156
-   0, если `child_id_expr` — не дочерний элемент `ancestor_id_expr`.
-   1, если `child_id_expr` — дочерний элемент `ancestor_id_expr` или если `child_id_expr` и есть `ancestor_id_expr`.
157 158 159

Тип — `UInt8`.

160
## Прочие функции {#ext_dict_functions-other}
161

B
BayoNet 已提交
162
ClickHouse поддерживает специализированные функции, которые приводят значения атрибутов словаря к определённому типу данных независимо от конфигурации словаря.
163 164 165

Функции:

166 167 168 169 170 171 172
-   `dictGetInt8`, `dictGetInt16`, `dictGetInt32`, `dictGetInt64`
-   `dictGetUInt8`, `dictGetUInt16`, `dictGetUInt32`, `dictGetUInt64`
-   `dictGetFloat32`, `dictGetFloat64`
-   `dictGetDate`
-   `dictGetDateTime`
-   `dictGetUUID`
-   `dictGetString`
173 174 175 176 177

Все эти функции можно использовать с модификатором `OrDefault`. Например, `dictGetDateOrDefault`.

Синтаксис:

178
``` sql
179 180 181 182 183 184
dictGet[Type]('dict_name', 'attr_name', id_expr)
dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
```

**Параметры**

185 186
-   `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
-   `attr_name` — имя столбца словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
D
Denis Zhuravlev 已提交
187
-   `id_expr` — значение ключа словаря. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../sql-reference/functions/ext-dict-functions.md) или [Tuple](../../sql-reference/functions/ext-dict-functions.md) в зависимости от конфигурации словаря.
188
-   `default_value_expr` — значение, возвращаемое в том случае, когда словарь не содержит строки с заданным ключом `id_expr`. [Выражение](../syntax.md#syntax-expressions) возвращающее значение с типом данных, сконфигурированным для атрибута `attr_name`.
189 190 191

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

192
-   Если ClickHouse успешно обработал атрибут в соответствии с [заданным типом данных](../../sql-reference/functions/ext-dict-functions.md#ext_dict_structure-attributes), то функции возвращают значение атрибута, соответствующее ключу `id_expr`.
193 194

-   Если запрошенного `id_expr` нет в словаре, то:
195

196 197
    -   `dictGet[Type]` возвращает содержимое элемента `<null_value>`, указанного для атрибута в конфигурации словаря.
    -   `dictGet[Type]OrDefault` возвращает аргумент `default_value_expr`.
198 199

Если значение атрибута не удалось обработать или оно не соответствует типу данных атрибута, то ClickHouse генерирует исключение.
I
Ivan Blinkov 已提交
200