hdfs
hdfs
HDFS에 저장된 파일에서 테이블을 만들어 읽을 수 있는 테이블 함수예요. url이나 file 테이블 함수와 비슷하게 동작하지만, 대상을 HDFS에 있는 파일로 지정해요.
출처: 문서
본문
HDFS의 파일에서 테이블을 만들어요. 이 테이블 함수는 url 및 file 테이블 함수와 비슷해요.
문법 (Syntax)
hdfs(URI, format, structure)
인자 (Arguments)
| 인자 | 설명 |
|---|---|
URI |
HDFS에 있는 파일의 상대 URI예요. 읽기 전용 모드에서는 경로가 다음 글로브(glob)를 지원해요: *, ?, {abc,def}, {N..M}. 여기서 N, M은 숫자이고, 'abc', 'def'는 문자열이에요. |
format |
파일의 포맷이에요. |
structure |
테이블의 구조예요. 'column1_name column1_type, column2_name column2_type, ...' 형태로 지정해요. |
반환값 (Returned value)
지정된 파일의 데이터를 읽거나 쓸 수 있는, 지정된 구조를 가진 테이블이에요.
예시
hdfs://hdfs1:9000/test의 테이블에서 처음 두 행을 선택하는 예시예요:
SELECT *
FROM hdfs('hdfs://hdfs1:9000/test', 'TSV', 'column1 UInt32, column2 UInt32, column3 UInt32')
LIMIT 2
┌─column1─┬─column2─┬─column3─┐
│ 1 │ 2 │ 3 │
│ 3 │ 2 │ 1 │
└─────────┴─────────┴─────────┘
경로의 글로브 (Globs in path)
경로는 글로브(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'
이 파일들의 행 수를 조회해요:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')
이 두 디렉터리의 모든 파일의 행 수를 조회해요:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')
파일 목록에 0으로 시작하는 숫자 범위가 들어 있다면, 각 자릿수마다 중괄호 구성을 사용하거나 ?를 사용하세요.
예시
file000, file001, …, file999 이름의 파일에서 데이터를 조회해요:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV', 'name String, value UInt32')
가상 컬럼 (Virtual Columns)
_path— 파일의 경로예요. 타입:LowCardinality(String)._file— 파일의 이름이에요. 타입:LowCardinality(String)._size— 바이트 단위의 파일 크기예요. 타입:Nullable(UInt64). 크기를 알 수 없으면 값은NULL이에요._time—