2020-10-26 10:29:30 +00:00
---
2022-08-26 17:37:11 +00:00
slug: /ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-hierarchical
2022-04-09 13:29:05 +00:00
sidebar_position: 45
sidebar_label: "Иерархические словари"
2020-10-26 10:29:30 +00:00
---
2020-03-20 18:20:59 +00:00
# Иерархические словари {#ierarkhicheskie-slovari}
2020-02-08 11:21:22 +00:00
2020-04-30 18:19:18 +00:00
ClickHouse поддерживает иерархические словари с [числовыми ключом ](external-dicts-dict-structure.md#ext_dict-numeric-key ).
2020-02-08 11:21:22 +00:00
Рассмотрим следующую структуру:
2020-03-20 18:20:59 +00:00
``` text
2020-02-08 11:21:22 +00:00
0 (Common parent)
│
├── 1 (Russia)
│ │
2020-03-20 18:20:59 +00:00
│ └── 2 (Moscow)
2020-02-08 11:21:22 +00:00
│ │
2020-03-20 18:20:59 +00:00
│ └── 3 (Center)
2020-02-08 11:21:22 +00:00
│
└── 4 (Great Britain)
│
└── 5 (London)
```
Эту иерархию можно выразить в виде следующей таблицы-словаря.
2020-10-13 17:23:29 +00:00
| region_id | parent_region | region_name |
2020-03-20 18:20:59 +00:00
|------------|----------------|---------------|
| 1 | 0 | Russia |
| 2 | 1 | Moscow |
| 3 | 2 | Center |
| 4 | 0 | Great Britain |
| 5 | 4 | London |
2020-02-08 11:21:22 +00:00
Таблица содержит столбец `parent_region` , содержащий ключ ближайшего предка для текущего элемента.
2022-04-11 15:55:54 +00:00
ClickHouse поддерживает свойство [hierarchical ](external-dicts-dict-structure.md#hierarchical-dict-attr ) для атрибутов [внешнего словаря ](./ ). Это свойство позволяет конфигурировать словари, подобные описанному выше.
2020-02-08 11:21:22 +00:00
2020-06-05 19:22:38 +00:00
С помощью функции [dictGetHierarchy ](../../../sql-reference/functions/ext-dict-functions.md#dictgethierarchy ) можно получить цепочку предков элемента.
2020-02-08 11:21:22 +00:00
Структура словаря для нашего примера может выглядеть следующим образом:
2020-03-20 18:20:59 +00:00
``` xml
2020-02-08 11:21:22 +00:00
< dictionary >
< structure >
< id >
< name > region_id< / name >
< / id >
< attribute >
< name > parent_region< / name >
< type > UInt64< / type >
< null_value > 0< / null_value >
< hierarchical > true< / hierarchical >
< / attribute >
< attribute >
< name > region_name< / name >
< type > String< / type >
< null_value > < / null_value >
< / attribute >
< / structure >
< / dictionary >
```