YAMLRegExpTree 소스는 로컬 파일 시스템의 YAML 파일에서 정규식 트리를 로드합니다.
이 소스는 regexp_tree 딕셔너리 레이아웃에서만 사용하도록 설계되었으며,
user agent 파싱과 같은 패턴 기반 lookup을 위해 계층적 정규식-속성 매핑을 제공합니다.
구성
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 디렉터리에 있어야 합니다. |
YAML 파일 구조
YAML 파일에는 정규식 트리 노드의 목록이 들어 있습니다. 각 노드는 속성과 하위 노드를 가질 수 있으며, 계층 구조를 이룹니다.
- 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). 문자열 매칭은 깊이 우선 방식으로 진행됩니다. 문자열이 어떤 노드와 일치하면 해당 노드의 자식도 검사합니다. 가장 깊은 수준에서 일치한 노드의 속성이 우선 적용되며, 이름이 같은 상위 속성은 덮어씁니다.
- regexp_tree 딕셔너리 레이아웃 — 레이아웃 구성, 쿼리 예시, 매칭 모드
- dictGet, dictGetAll — regexp 트리 딕셔너리를 조회하는 함수