La source YAMLRegExpTree charge un arbre d’expressions régulières à partir d’un fichier YAML situé sur le système de fichiers local.
Elle est conçue exclusivement pour être utilisée avec le layout du dictionnaire regexp_tree
et fournit des correspondances hiérarchiques entre regex et attributs pour des lookups basés sur des motifs, comme l’analyse des user agents.
Configuration
CREATE DICTIONARY regexp_dict
(
regexp String,
name String,
version String
)
PRIMARY KEY(regexp)
SOURCE(YAMLRegExpTree(PATH '/var/lib/clickhouse/user_files/regexp_tree.yaml'))
LAYOUT(regexp_tree)
LIFETIME(0);Champs des paramètres :
| Paramètre | Description |
|---|---|
PATH |
Chemin absolu vers le fichier YAML contenant l’arbre d’expression régulière. Lorsqu’il est créé via DDL, le fichier doit se trouver dans le répertoire user_files. |
Structure du fichier YAML
Le fichier YAML contient une liste de nœuds d’un arbre d’expressions régulières. Chaque nœud peut comporter des attributs et des nœuds enfants, formant une hiérarchie :
- regexp: 'Linux/(\d+[\.\d]*).+tlinux'
name: 'TencentOS'
version: '\1'
- regexp: '\d+/tclwebkit(?:\d+[\.\d]*)'
name: 'Android'
versions:
- regexp: '33/tclwebkit'
version: '13'
- regexp: '3[12]/tclwebkit'
version: '12'
- regexp: '30/tclwebkit'
version: '11'
- regexp: '29/tclwebkit'
version: '10'Chaque nœud a la structure suivante :
regexp: L’expression régulière de ce nœud.- attributes: Attributs de dictionnaire définis par l’utilisateur (par ex.
name,version). Les valeurs des attributs peuvent contenir des références arrière à des groupes de capture dans l’expression régulière, notées\1ou$1(nombres de 1 à 9). Elles sont remplacées par le groupe de capture correspondant au moment de l’exécution de la requête. - child nodes: Une liste de nœuds enfants, chacun avec ses propres attributs et, éventuellement, d’autres enfants. Le nom de la liste des enfants est arbitraire (par ex.
versionsci-dessus). La correspondance des chaînes s’effectue par parcours en profondeur : si une chaîne correspond à un nœud, ses enfants sont eux aussi vérifiés. Les attributs du nœud correspondant le plus profond ont priorité et remplacent les attributs du parent portant le même nom.
- layout du dictionnaire regexp_tree — configuration du layout, exemples de requêtes et modes de correspondance
- dictGet, dictGetAll — fonctions pour interroger les dictionnaires regexp tree