> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Источник словаря YAMLRegExpTree

> Настройка YAML-файла как источника для словарей на основе дерева регулярных выражений.

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

Источник `YAMLRegExpTree` загружает дерево регулярных выражений из YAML-файла в локальной файловой системе.
Он предназначен исключительно для использования со структурой словаря [`regexp_tree`](/ru/reference/statements/create/dictionary/layouts/regexp-tree)
и обеспечивает иерархическое сопоставление регулярных выражений с атрибутами для поиска по шаблону, например при разборе user agent.

<Note>
  Источник `YAMLRegExpTree` доступен только в ClickHouse Open Source.
  В ClickHouse Cloud вместо этого экспортируйте словарь в CSV и загрузите его через [источник ClickHouse table](/ru/reference/statements/create/dictionary/sources/clickhouse).
  Подробности см. в разделе [Использование словарей regexp\_tree в ClickHouse Cloud](/ru/reference/statements/create/dictionary/layouts/regexp-tree#use-regular-expression-tree-dictionary-in-clickhouse-cloud).
</Note>

<div id="configuration">
  ## Конфигурация
</div>

```sql theme={null}
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);
```

Поля параметра:

| Настройка | Описание                                                                                                                                      |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `PATH`    | Абсолютный путь к YAML-файлу, содержащему дерево регулярных выражений. При создании через DDL файл должен находиться в каталоге `user_files`. |

<div id="yaml-file-structure">
  ## Структура YAML-файла
</div>

YAML-файл содержит список узлов дерева регулярных выражений. У каждого узла могут быть атрибуты и дочерние узлы, образующие иерархию:

```yaml theme={null}
- 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'
```

Каждый узел имеет следующую структуру:

* **`regexp`**: Регулярное выражение для этого узла.
* **attributes**: Задаваемые пользователем атрибуты словаря (например, `name`, `version`). Значения атрибутов могут содержать **обратные ссылки** на группы захвата в регулярном выражении, записанные как `\1` или `$1` (числа 1–9). При выполнении запроса они заменяются на соответствующую совпавшую группу захвата.
* **child nodes**: Список дочерних узлов, каждый со своими атрибутами и, при необходимости, дополнительными дочерними узлами. Имя списка дочерних узлов произвольное (например, `versions` выше). Сопоставление строк выполняется в глубину: если строка соответствует узлу, проверяются и его дочерние узлы. Атрибуты самого глубокого совпавшего узла имеют приоритет и переопределяют одноимённые атрибуты родительского узла.

<div id="related-pages">
  ## Связанные страницы
</div>

* [структура словаря regexp\_tree](/ru/reference/statements/create/dictionary/layouts/regexp-tree) — настройка структуры, примеры запросов и режимы сопоставления
* [dictGet](/ru/reference/functions/regular-functions/ext-dict-functions#dictGet), [dictGetAll](/ru/reference/functions/regular-functions/ext-dict-functions#dictGetAll) — функции для запросов к словарям дерева регулярных выражений
