클러스터 내 여러 노드에서 지정된 경로와 일치하는 파일을 동시에 처리할 수 있도록 합니다. initiator는 worker 노드와 연결을 설정하고, 파일 경로의 글롭 패턴을 확장한 뒤, 파일 읽기 작업을 worker 노드에 할당합니다. 각 worker 노드는 처리할 다음 파일을 initiator에 요청하며, 모든 작업이 완료될 때까지(모든 파일을 읽을 때까지) 이 과정을 반복합니다.
이 함수는 처음 지정한 경로와 일치하는 파일 집합이 모든 노드에서 동일하고, 해당 파일의 내용도 노드 간에 일관될 때만 정상적으로 동작합니다.
이 파일들이 노드마다 다르면 반환값은 미리 정해질 수 없으며, worker 노드가 initiator에 작업을 요청하는 순서에 따라 달라집니다.
fileCluster(cluster_name, path[, format, structure, compression_method])
| 인수 | 설명 |
|---|
cluster_name | 원격 및 로컬 서버의 주소 집합과 연결 매개변수를 구성하는 데 사용되는 클러스터의 이름입니다. |
path | user_files_path에 있는 파일의 상대 경로입니다. 파일 경로는 글롭 패턴도 지원합니다. |
format | 파일의 포맷입니다. 유형: String. |
structure | 'UserID UInt64, Name String' 포맷의 테이블 구조입니다. 컬럼 이름과 타입을 결정합니다. 유형: String. |
compression_method | 압축 방법입니다. 지원되는 압축 타입은 gz, br, xz, zst, lz4, bz2입니다. |
지정된 포맷과 구조를 가지며, 지정된 경로와 일치하는 파일의 데이터를 포함하는 테이블입니다.
예시
my_cluster라는 이름의 클러스터가 있고, 설정 user_files_path의 값이 다음과 같다고 가정합니다:
$ grep user_files_path /etc/clickhouse-server/config.xml
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
또한 각 클러스터 노드의 user_files_path 안에 test1.csv와 test2.csv 파일이 있고, 그 내용이 노드마다 동일하다고 가정하면:
$ cat /var/lib/clickhouse/user_files/test1.csv
1,"file1"
11,"file11"
$ cat /var/lib/clickhouse/user_files/test2.csv
2,"file2"
22,"file22"
예를 들어, 각 클러스터 노드에서 이 두 쿼리를 실행하면 다음 파일을 생성할 수 있습니다:
INSERT INTO TABLE FUNCTION file('file1.csv', 'CSV', 'i UInt32, s String') VALUES (1,'file1'), (11,'file11');
INSERT INTO TABLE FUNCTION file('file2.csv', 'CSV', 'i UInt32, s String') VALUES (2,'file2'), (22,'file22');
이제 fileCluster 테이블 함수를 사용해 test1.csv와 test2.csv의 데이터를 읽습니다:
SELECT * FROM fileCluster('my_cluster', 'file{1,2}.csv', 'CSV', 'i UInt32, s String') ORDER BY i, s
┌──i─┬─s──────┐
│ 1 │ file1 │
│ 11 │ file11 │
└────┴────────┘
┌──i─┬─s──────┐
│ 2 │ file2 │
│ 22 │ file22 │
└────┴────────┘
File 테이블 함수에서 지원하는 모든 패턴은 FileCluster에서도 지원됩니다.