Dictionnaires hiérarchiques
ClickHouse prend en charge les dictionnaires hiérarchiques avec une clé numérique.
Considérez la structure hiérarchique suivante :
0 (Common parent)
│
├── 1 (United States of America)
│ │
│ └── 2 (California)
│ │
│ └── 3 (San Francisco)
│
└── 4 (Great Britain)
│
└── 5 (London)Cette hiérarchie peut être représentée par la table de dictionnaire suivante.
| region_id | parent_region | region_name |
|---|---|---|
| 1 | 0 | États-Unis d'Amérique |
| 2 | 1 | Californie |
| 3 | 2 | San Francisco |
| 4 | 0 | Grande-Bretagne |
| 5 | 4 | Londres |
Cette table contient une colonne parent_region qui contient la clé du parent le plus proche de l'élément.
ClickHouse prend en charge la propriété hiérarchique pour les attributs de dictionnaire externes. Cette propriété vous permet de configurer le dictionnaire hiérarchique de manière similaire à ce qui est décrit ci-dessus.
La fonction dictGetHierarchy vous permet d'obtenir la chaîne des parents d'un élément. La fonction dictGetRoot renvoie uniquement l'ancêtre le plus haut placé (la racine) d'un élément.
Pour notre exemple, la structure du dictionnaire peut être la suivante :
CREATE DICTIONARY regions_dict
(
region_id UInt64,
parent_region UInt64 DEFAULT 0 HIERARCHICAL,
region_name String DEFAULT ''
)
PRIMARY KEY region_id
SOURCE(...)
LAYOUT(HASHED())
LIFETIME(3600);<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>