hdfs 테이블 함수
HDFS에 있는 파일에서 테이블을 생성합니다. 이 테이블 함수는 url 및 file 테이블 함수와 유사합니다.
구문
인수
| Argument | Description |
|---|---|
URI | HDFS 내 파일에 대한 상대 URI입니다. 파일 경로는 읽기 전용 모드에서 다음과 같은 glob 패턴을 지원합니다: *, ?, {abc,def}, {N..M} (N, M은 숫자, 'abc', 'def'는 문자열). |
format | 파일의 format입니다. |
structure | 테이블의 구조입니다. 형식은 'column1_name column1_type, column2_name column2_type, ...'입니다. |
반환 값
지정된 파일에서 데이터를 읽거나 쓰기 위한 지정된 구조의 테이블입니다.
예시
hdfs://hdfs1:9000/test에서 생성된 테이블과 그 테이블에서 처음 두 개의 행을 선택하는 예:
경로에서 글롭(glob) 사용
경로에서 글로빙을 사용할 수 있습니다. 파일은 접두사나 접미사만이 아니라 전체 경로 패턴과 일치해야 합니다.
*— 비어 있는 문자열을 포함하여/를 제외한 임의 개수의 문자를 나타냅니다.**— 디렉터리 내부의 모든 파일을 재귀적으로 나타냅니다.?— 임의의 단일 문자를 나타냅니다.{some_string,another_string,yet_another_one}— 문자열'some_string', 'another_string', 'yet_another_one'중 하나로 치환됩니다. 문자열에는/기호를 포함할 수 있습니다.{N..M}—>= N그리고<= M인 임의의 숫자를 나타냅니다.
{} 구문은 remote 및 file 테이블 함수와 유사하게 동작합니다.
예시
- 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'
- 다음 쿼리로 이 파일들의 행 수를 조회합니다:
- 이 두 디렉터리 내 모든 파일의 행 개수를 조회합니다:
참고
파일 목록에 선행 0이 있는 숫자 범위가 포함되어 있는 경우, 각 자릿수마다 중괄호를 사용하는 방식이나 ?를 사용하십시오.
예시
file000, file001, ... , file999라는 이름의 파일에서 데이터를 쿼리합니다:
가상 컬럼
_path— 파일 경로. 타입:LowCardinality(String)._file— 파일 이름. 타입:LowCardinality(String)._size— 파일 크기(바이트). 타입:Nullable(UInt64). 크기를 알 수 없으면 값은NULL입니다._time— 파일의 마지막 수정 시각. 타입:Nullable(DateTime). 시각을 알 수 없으면 값은NULL입니다.
use_hive_partitioning 설정
use_hive_partitioning 값이 1로 설정되어 있으면 ClickHouse는 경로(/name=value/)에서 Hive 스타일의 파티셔닝을 감지하고, 쿼리에서 파티션 컬럼을 가상 컬럼으로 사용할 수 있도록 허용합니다. 이러한 가상 컬럼은 파티셔닝 경로에 있는 컬럼과 동일한 이름을 가지지만, 앞에 _가 붙습니다.
예시
Hive 스타일 파티셔닝으로 생성된 가상 컬럼 사용
Storage 설정
- hdfs_truncate_on_insert - INSERT 전에 파일 내용을 비우도록 허용합니다. 기본적으로 비활성화되어 있습니다.
- hdfs_create_new_file_on_insert - 포맷에 접미사가 있는 경우 각 INSERT 작업마다 새 파일을 생성하도록 허용합니다. 기본적으로 비활성화되어 있습니다.
- hdfs_skip_empty_files - 읽을 때 빈 파일을 건너뛰도록 허용합니다. 기본적으로 비활성화되어 있습니다.