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` , содержащий ключ ближайшего предка для текущего элемента.
2020-04-30 18:19:18 +00:00
ClickHouse поддерживает свойство [hierarchical ](external-dicts-dict-structure.md#hierarchical-dict-attr ) для атрибутов [внешнего словаря ](index.md ). Это свойство позволяет конфигурировать словари, подобные описанному выше.
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 >
```
[Оригинальная статья ](https://clickhouse.tech/docs/ru/query_language/dicts/external_dicts_dict_hierarchical/ ) <!--hide-->