ext-dict-functions.md 9.4 KB
Newer Older
1
# Функции для работы с внешними словарями {#ext_dict_functions}
2

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

5
## dictGet {#dictget}
6

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

9
``` sql
10 11 12
dictGet('dict_name', 'attr_name', id_expr)
dictGetOrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
```
13

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

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

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

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

25 26 27 28
-   Если ключа, соответствующего `id_expr` в словаре нет, то:

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

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

32
**Пример**
33

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

36
``` text
37 38 39 40 41 42 43 44
1,1
2,2
```

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

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

45
``` xml
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
<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>
```

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

75
``` sql
76 77 78 79 80 81 82
SELECT
    dictGetOrDefault('ext-dict-test', 'c1', number + 1, toUInt32(number * 10)) AS val,
    toTypeName(val) AS type
FROM system.numbers
LIMIT 3
```

83
``` text
84 85 86 87 88 89 90 91 92
┌─val─┬─type───┐
│   1 │ UInt32 │
│   2 │ UInt32 │
│  20 │ UInt32 │
└─────┴────────┘
```

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

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

95
## dictHas {#dicthas}
96

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

99
``` sql
100 101 102 103 104
dictHas('dict_name', id)
```

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

105
-   `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
106
-   `id_expr` — значение ключа словаря. [Выражение](../syntax.md#syntax-expressions), возвращающее значение типа [UInt64](../../sql-reference/functions/ext-dict-functions.md).
107 108 109

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

110 111
-   0, если ключа нет.
-   1, если ключ есть.
112 113 114

Тип — `UInt8`.

115
## dictGetHierarchy {#dictgethierarchy}
116

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

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

121
``` sql
122
dictGetHierarchy('dict_name', key)
123 124 125 126
```

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

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

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

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

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

136
## dictIsIn {#dictisin}
137

B
BayoNet 已提交
138
Проверяет предка ключа по всей иерархической цепочке словаря.
139 140 141 142 143

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

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

144
-   `dict_name` — имя словаря. [Строковый литерал](../syntax.md#syntax-string-literal).
145 146
-   `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).
147 148 149

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

150 151
-   0, если `child_id_expr` — не дочерний элемент `ancestor_id_expr`.
-   1, если `child_id_expr` — дочерний элемент `ancestor_id_expr` или если `child_id_expr` и есть `ancestor_id_expr`.
152 153 154

Тип — `UInt8`.

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

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

Функции:

161 162 163 164 165 166 167
-   `dictGetInt8`, `dictGetInt16`, `dictGetInt32`, `dictGetInt64`
-   `dictGetUInt8`, `dictGetUInt16`, `dictGetUInt32`, `dictGetUInt64`
-   `dictGetFloat32`, `dictGetFloat64`
-   `dictGetDate`
-   `dictGetDateTime`
-   `dictGetUUID`
-   `dictGetString`
168 169 170 171 172

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

Синтаксис:

173
``` sql
174 175 176 177 178 179
dictGet[Type]('dict_name', 'attr_name', id_expr)
dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
```

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

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

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

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

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

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

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

I
Ivan Blinkov 已提交
196
[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/functions/ext_dict_functions/) <!--hide-->