hdfsCluster
hdfsCluster
지정된 클러스터의 여러 노드에서 HDFS 파일을 병렬로 처리할 수 있게 해주는 테이블 함수예요. hdfs 함수를 여러 노드에 분산해서 실행한다고 볼 수 있어요.
출처: 문서
본문
지정된 클러스터의 여러 노드에서 HDFS의 파일을 병렬로 처리할 수 있어요. 이니시에이터(initiator)는 클러스터의 모든 노드에 연결을 만들고, HDFS 파일 경로의 별표(*)를 풀어낸 뒤 각 파일을 동적으로 분배해요. 워커 노드는 이니시에이터에게 처리할 다음 작업을 물어보고 처리해요. 이 과정은 모든 작업이 끝날 때까지 반복돼요.
문법 (Syntax)
hdfsCluster(cluster_name, URI, format, structure)
인자 (Arguments)
| 인자 | 설명 |
|---|---|
cluster_name |
원격·로컬 서버의 주소 집합과 연결 파라미터를 만드는 데 사용하는 클러스터 이름이에요. |
URI |
파일 또는 파일 묶음의 URI예요. 읽기 전용 모드에서 다음 와일드카드를 지원해요: *, **, ?, {'abc','def'}, {N..M}. 여기서 N, M은 숫자이고 abc, def는 문자열이에요. 자세한 내용은 경로의 와일드카드를 참고하세요. |
format |
파일의 포맷이에요. |
structure |
테이블의 구조예요. 'column1_name column1_type, column2_name column2_type, ...' 형태로 지정해요. |
반환값 (Returned value)
지정된 파일의 데이터를 읽을 수 있는, 지정된 구조를 가진 테이블이에요.
예시 (Examples)
cluster_simple이라는 ClickHouse 클러스터가 있고, HDFS에 다음과 같은 URI를 가진 여러 파일이 있다고 가정해볼게요:
- 'hdfs://hdfs1:9000/some_dir/some_file_1'
- 'hdfs://hdfs1:9000/some_dir/some_file_2'
- 'hdfs://hdfs1:9000/some_dir/some_file_3'
- 'hdfs://hdfs1:9000/another_dir/some_file_1'
- 'hdfs://hdfs1:9000/another_dir/some_file_2'
- 'hdfs://hdfs1:9000/another_dir/some_file_3'
이 파일들의 행 수를 조회해요:
SELECT count(*)
FROM hdfsCluster('cluster_simple', 'hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')
이 두 디렉터리의 모든 파일의 행 수를 조회해요:
SELECT count(*)
FROM hdfsCluster('cluster_simple', 'hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')
파일 목록에 0으로 시작하는 숫자 범위가 들어 있다면, 각 자릿수마다 중괄호 구성을 사용하거나 ?를 사용하세요.