A fonte YAMLRegExpTree carrega uma árvore de expressões regulares de um arquivo YAML no sistema de arquivos local.
Ela foi projetada exclusivamente para uso com o layout de dicionário regexp_tree
e fornece mapeamentos hierárquicos de regex para atributos para buscas baseadas em padrões, como a análise de user agent.
Configuração
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);Campos de configuração:
| Configuração | Descrição |
|---|---|
PATH |
O caminho absoluto para o arquivo YAML que contém a árvore de expressões regulares. Quando criado via DDL, o arquivo deve estar no diretório user_files. |
Estrutura do arquivo YAML
O arquivo YAML contém uma lista de nós de uma árvore de expressões regulares. Cada nó pode ter atributos e nós filhos, formando uma hierarquia:
- 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'Cada nó tem a seguinte estrutura:
regexp: A expressão regular deste nó.- attributes: Atributos de dicionário definidos pelo usuário (por exemplo,
name,version). Os valores dos atributos podem conter referências retroativas a grupos de captura na expressão regular, escritas como\1ou$1(números de 1 a 9). Elas são substituídas pelo grupo de captura correspondente durante a consulta. - child nodes: Uma lista de filhos, cada um com seus próprios atributos e, opcionalmente, mais filhos. O nome da lista de filhos é arbitrário (por exemplo,
versionsacima). A correspondência de strings segue uma busca em profundidade: se uma string corresponder a um nó, seus filhos também serão verificados. Os atributos do nó correspondente mais profundo têm precedência, substituindo os atributos do nó pai com o mesmo nome.
- layout de dicionário regexp_tree — configuração do layout, exemplos de consulta e modos de correspondência
- dictGet, dictGetAll — funções para consultar dicionários regexp tree