사용법
URI- HDFS의 전체 파일 URI입니다.URI의 경로 부분에는 글롭 패턴이 포함될 수 있습니다. 이 경우 테이블은 읽기 전용이 됩니다.format- 사용 가능한 파일 포맷 중 하나를 지정합니다.SELECT쿼리를 실행하려면 해당 포맷이 입력을 지원해야 하며,INSERT쿼리를 실행하려면 출력을 지원해야 합니다. 사용 가능한 포맷은 포맷 섹션에 나와 있습니다.- [PARTITION BY expr]
PARTITION BY
PARTITION BY — 선택 사항입니다. 대부분의 경우 파티션 키는 필요하지 않으며, 필요하더라도 보통 월 단위보다 더 세분화할 필요는 없습니다. 파티셔닝은 쿼리 속도를 높여 주지 않습니다(ORDER BY 표현식과는 다릅니다). 지나치게 세분화된 파티셔닝은 절대 사용하지 마십시오. 데이터를 클라이언트 식별자나 이름으로 파티셔닝하지 마십시오(대신 클라이언트 식별자 또는 이름을 ORDER BY 표현식의 첫 번째 컬럼으로 지정하십시오).
월 단위로 파티셔닝하려면 toYYYYMM(date_column) 표현식을 사용하십시오. 여기서 date_column은 Date 타입의 날짜 컬럼입니다. 이 경우 파티션 이름은 "YYYYMM" 포맷을 사용합니다.
예시:
1. hdfs_engine_table 테이블을 설정합니다:
구현 세부 정보
- 읽기와 쓰기는 병렬로 수행할 수 있습니다.
- 지원되지 않습니다:
ALTER및SELECT...SAMPLE작업- 인덱스
- Zero-copy 복제도 가능하지만 권장되지 않습니다.
zero-copy 복제는 운영 환경에서 사용할 준비가 되지 않았습니다ClickHouse 버전 22.8 이상에서는 zero-copy 복제가 기본적으로 비활성화되어 있습니다. 이 기능은 운영 환경에서 사용하는 것을 권장하지 않습니다.
SELECT 시점에 결정되며(CREATE 시점이 아님).
*— 빈 문자열을 포함해/를 제외한 임의의 문자를 0개 이상 대체합니다.?— 임의의 단일 문자를 대체합니다.{some_string,another_string,yet_another_one}—'some_string', 'another_string', 'yet_another_one'중 하나의 문자열로 대체합니다.{N..M}— N부터 M까지의 범위에 있는 임의의 숫자(양 끝값 포함)로 대체합니다.
{}를 사용하는 구문은 remote 테이블 함수와 유사합니다.
예시
-
HDFS에 다음 URI를 가진 TSV 포맷의 파일이 여러 개 있다고 가정합니다:
- ‘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’
- 이 6개 파일 전체로 구성된 테이블을 만드는 방법은 여러 가지가 있습니다:
파일 목록에 앞자리가 0인 숫자 범위가 포함된 경우, 각 자릿수별로 중괄호를 사용하는 구문이나
?를 사용하십시오.file000, file001, … , file999라는 이름의 파일로 table을 생성합니다:
구성
hdfs)과 사용자 수준(hdfs_*)의 두 가지입니다. 먼저 전역 구성이 적용되고, 그다음 사용자 수준 구성이 적용됩니다(있는 경우).
구성 옵션
libhdfs3에서 지원되는 항목
| 매개변수 | 기본값 |
|---|---|
| rpc_client_connect_tcpnodelay | true |
| dfs_client_read_shortcircuit | true |
| output_replace-datanode-on-failure | true |
| input_notretry-another-node | false |
| input_localread_mappedfile | true |
| dfs_client_use_legacy_blockreader_local | false |
| rpc_client_ping_interval | 10 * 1000 |
| rpc_client_connect_timeout | 600 * 1000 |
| rpc_client_read_timeout | 3600 * 1000 |
| rpc_client_write_timeout | 3600 * 1000 |
| rpc_client_socket_linger_timeout | -1 |
| rpc_client_connect_retry | 10 |
| rpc_client_timeout | 3600 * 1000 |
| dfs_default_replica | 3 |
| input_connect_timeout | 600 * 1000 |
| input_read_timeout | 3600 * 1000 |
| input_write_timeout | 3600 * 1000 |
| input_localread_default_buffersize | 1 * 1024 * 1024 |
| dfs_prefetchsize | 10 |
| input_read_getblockinfo_retry | 3 |
| input_localread_blockinfo_cachesize | 1000 |
| input_read_max_retry | 60 |
| output_default_chunksize | 512 |
| output_default_packetsize | 64 * 1024 |
| output_default_write_retry | 10 |
| output_connect_timeout | 600 * 1000 |
| output_read_timeout | 3600 * 1000 |
| output_write_timeout | 3600 * 1000 |
| output_close_timeout | 3600 * 1000 |
| output_packetpool_size | 1024 |
| output_heartbeat_interval | 10 * 1000 |
| dfs_client_failover_max_attempts | 15 |
| dfs_client_read_shortcircuit_streams_cache_size | 256 |
| dfs_client_socketcache_expiryMsec | 3000 |
| dfs_client_socketcache_capacity | 16 |
| dfs_default_blocksize | 64 * 1024 * 1024 |
| dfs_default_uri | ”hdfs://localhost:9000” |
| hadoop_security_authentication | ”simple” |
| hadoop_security_kerberos_ticket_cache_path | "" |
| dfs_client_log_severity | ”INFO” |
| dfs_domain_socket_path | "" |
ClickHouse 추가 설정
| 매개변수 | 기본값 |
|---|---|
| hadoop_kerberos_keytab | "" |
| hadoop_kerberos_principal | "" |
| libhdfs3_conf | "" |
제한 사항
hadoop_security_kerberos_ticket_cache_path및libhdfs3_conf는 사용자별이 아닌 전역으로만 설정할 수 있습니다
Kerberos 지원
hadoop_security_authentication 매개변수 값이 kerberos이면 ClickHouse는 Kerberos를 통해 인증합니다.
매개변수는 여기에서 확인할 수 있으며, hadoop_security_kerberos_ticket_cache_path도 도움이 될 수 있습니다.
libhdfs3의 제한으로 인해 오래된 방식만 지원된다는 점에 유의하십시오.
datanode 통신은 SASL로 보호되지 않으며(HADOOP_SECURE_DN_USER는 이러한
보안 방식의 신뢰할 수 있는 지표입니다), 참고용으로 tests/integration/test_storage_kerberized_hdfs/hdfs_configs/bootstrap.sh를 사용하십시오.
hadoop_kerberos_keytab, hadoop_kerberos_principal, hadoop_security_kerberos_ticket_cache_path 중 하나라도 지정되면 Kerberos 인증이 사용됩니다. 이 경우 hadoop_kerberos_keytab과 hadoop_kerberos_principal은 필수입니다.
HDFS 네임노드 HA 지원
- HDFS 노드에서
hdfs-site.xml을/etc/clickhouse-server/로 복사하십시오. - ClickHouse 구성 파일에 다음 내용을 추가하십시오.
- 그런 다음 HDFS URI에서 네임노드 주소로
hdfs-site.xml의dfs.nameservices값를 사용합니다. 예를 들어hdfs://appadmin@192.168.101.11:8020/abc/를hdfs://appadmin@my_nameservice/abc/로 바꾸십시오.
가상 컬럼
_path— 파일 경로입니다. 유형:LowCardinality(String)._file— 파일 이름입니다. 유형:LowCardinality(String)._size— 파일 크기(바이트)입니다. 유형:Nullable(UInt64). 크기를 알 수 없으면 값은NULL입니다._time— 파일의 마지막 수정 시각입니다. 유형:Nullable(DateTime). 시각을 알 수 없으면 값은NULL입니다.
저장소 설정
- hdfs_truncate_on_insert - 파일에 삽입하기 전에 해당 파일을 truncate할 수 있습니다. 기본적으로 비활성화되어 있습니다.
- hdfs_create_new_file_on_insert - 포맷에 suffix가 있는 경우, 삽입할 때마다 새 파일을 생성할 수 있습니다. 기본적으로 비활성화되어 있습니다.
- hdfs_skip_empty_files - 읽는 중 빈 파일을 건너뛸 수 있습니다. 기본적으로 비활성화되어 있습니다.