테이블 생성
엔진 인수
S3, AzureBlobStorage, HDFS, File 엔진의 인수 설명과 동일합니다.
format은 Iceberg 테이블의 데이터 파일 포맷을 나타냅니다.
IcebergS3에서는 선택 사항인 extra_credentials 매개변수를 사용해 ClickHouse Cloud에서 역할 기반 접근을 위한 role_arn을 전달할 수 있습니다. 구성 단계는 보안 S3를 참조하십시오.
엔진 매개변수는 이름이 지정된 컬렉션을 사용해 지정할 수 있습니다.
예시
별칭
Iceberg는 이제 IcebergS3의 별칭입니다.
데이터 타입
기본 타입
| Iceberg 타입 | ClickHouse 타입 | 비고 |
|---|---|---|
boolean | Bool | |
int | Int32 | |
long, bigint | Int64 | |
float | Float32 | |
double | Float64 | |
date | Date32 | |
time | Int64 | 자정부터 경과한 마이크로초 |
timestamp | DateTime64(6) | 마이크로초, 시간대 없음 |
timestamptz | DateTime64(6, 'UTC') | 마이크로초, UTC 시간대 |
timestamp_ns | DateTime64(9) | 나노초, 시간대 없음 (Iceberg v3부터만 지원) |
timestamptz_ns | DateTime64(9, 'UTC') | 나노초, UTC 시간대 (Iceberg v3부터만 지원) |
string, binary | String | |
uuid | UUID | |
fixed(N) | FixedString(N) | |
decimal(P, S) | Decimal(P, S) |
복합 타입
| Iceberg 유형 | ClickHouse 유형 |
|---|---|
list | Array |
map | Map |
struct | Tuple |
스키마 진화
- int -> long
- float -> double
- decimal(P, S) -> decimal(P’, S) where P’ > P.
파티션 프루닝
use_iceberg_partition_pruning = 1로 설정합니다. Iceberg 파티션 프루닝에 대한 자세한 내용은 https://iceberg.apache.org/spec/#partitioning 를 참조하십시오.
시점 조회
삭제된 행이 포함된 테이블 처리
- 삭제 벡터 (v3에 도입됨)
기본 사용법
iceberg_timestamp_ms 매개변수와 iceberg_snapshot_id 매개변수를 동시에 지정할 수 없습니다.
중요한 고려 사항
-
스냅샷은 일반적으로 다음과 같은 경우 생성됩니다:
- 새 데이터가 테이블에 기록될 때
- 어떤 형태로든 데이터 compaction이 수행될 때
- 스키마 변경은 일반적으로 스냅샷을 생성하지 않습니다 - 이로 인해 스키마 진화를 거친 테이블에 시점 조회를 사용할 때 중요한 동작상의 차이가 발생합니다.
예시 시나리오
시나리오 1: 새 스냅샷 없이 스키마가 변경되는 경우
- ts1 & ts2: 원래의 두 개 컬럼만 표시됩니다
- ts3: 세 개 컬럼이 모두 표시되며, 첫 번째 행의 price는 NULL입니다
시나리오 2: 과거 스키마와 현재 스키마의 차이
ALTER TABLE이 새 스냅샷을 생성하지 않기 때문입니다. 현재 테이블에서는 Spark가 스냅샷이 아니라 최신 메타데이터 파일에서 schema_id 값을 가져옵니다.
시나리오 3: 과거 스키마와 현재 스키마의 차이
메타데이터 파일 결정
Iceberg 테이블 엔진을 사용할 때 시스템은 Iceberg 테이블 구조를 설명하는 올바른 metadata.json 파일을 찾아야 합니다. 이 결정 과정은 다음과 같이 진행됩니다:
후보 검색
- 직접 경로 지정:
iceberg_metadata_file_path를 설정하면 시스템은 이 경로를 Iceberg 테이블 디렉터리 경로와 결합해 그대로 사용합니다.- 이 설정이 제공되면 다른 모든 확인 관련 설정은 무시됩니다.
- 테이블 UUID 일치:
iceberg_metadata_table_uuid가 지정되면 시스템은 다음과 같이 동작합니다:metadata디렉터리의.metadata.json파일만 확인합니다- 지정한 UUID와 일치하는
table-uuid필드가 포함된 파일만 필터링합니다(대소문자 구분 없음)
- 기본 검색:
- 위 두 설정이 모두 제공되지 않으면
metadata디렉터리의 모든.metadata.json파일이 후보가 됩니다
최신 파일 선택
-
iceberg_recent_metadata_file_by_last_updated_ms_field가 활성화된 경우:last-updated-ms값이 가장 큰 파일이 선택됩니다
-
그렇지 않은 경우:
- 버전 번호가 가장 높은 파일이 선택됩니다
- (버전은
V.metadata.json또는V-uuid.metadata.json형식의 파일 이름에서V로 표시됩니다)
Iceberg 테이블 엔진은 S3에 저장된 파일을 Iceberg 테이블로 직접 해석합니다. 따라서 이러한 해석 규칙을 이해하는 것이 중요합니다.
데이터 캐시
Iceberg 테이블 엔진과 테이블 함수는 S3, AzureBlobStorage, HDFS 저장소와 마찬가지로 데이터 캐시를 지원합니다. 자세한 내용은 여기를 참조하십시오.
메타데이터 캐시
Iceberg 테이블 엔진과 테이블 함수는 manifest 파일, manifest 목록, 메타데이터 JSON 정보를 저장하는 메타데이터 캐시를 지원합니다. 이 캐시는 메모리에 저장됩니다. 이 기능은 use_iceberg_metadata_files_cache 설정으로 제어되며, 기본적으로 활성화되어 있습니다.
비동기 메타데이터 프리페치
iceberg_metadata_async_prefetch_period_ms를 설정하여 Iceberg 테이블 생성 시 활성화할 수 있습니다. 이 값을 0(기본값)으로 설정하거나 메타데이터 캐싱이 활성화되지 않은 경우, 비동기 프리페치는 비활성화됩니다.
이 기능을 활성화하려면 0이 아닌 밀리초 단위의 값을 지정해야 합니다. 이 값은 프리페치 사이클 사이의 간격을 나타냅니다.
활성화되면 server는 원격 catalog를 조회하고 새 메타데이터 버전을 감지하는 백그라운드 작업을 주기적으로 실행합니다. 그런 다음 이를 파싱하고 스냅샷을 재귀적으로 순회하면서 활성 manifest 목록 파일과 manifest 파일을 가져옵니다.
메타데이터 캐시에 이미 있는 파일은 다시 다운로드되지 않습니다. 각 프리페치 사이클이 끝나면 최신 메타데이터 스냅샷을 메타데이터 캐시에서 사용할 수 있습니다.
iceberg_metadata_staleness_ms 매개변수를 쿼리 또는 세션 매개변수로 지정해야 합니다. 기본값(0 - 지정되지 않음)에서는 각 쿼리마다 서버가 원격 catalog에서 최신 메타데이터를 가져옵니다.
메타데이터 staleness 허용 범위를 지정하면 서버는 원격 catalog를 호출하지 않고 캐시된 메타데이터 스냅샷 버전을 사용할 수 있습니다. 캐시에 메타데이터 버전이 있고, 지정된 staleness 윈도우 내에 다운로드된 경우 해당 버전을 사용해 쿼리를 처리합니다.
그렇지 않으면 원격 catalog에서 최신 버전을 가져옵니다.
ICEBERG_SCEDULE_POOL에서 실행되며, 이 풀은 활성 Iceberg 테이블의 백그라운드 작업을 처리하는 서버 측 스레드 풀입니다. 이 스레드 풀의 크기는 iceberg_background_schedule_pool_size 서버 구성 매개변수로 제어됩니다(기본값은 10).
참고: 비동기 프리페치가 활성화된 경우, 현재는 메타데이터 캐시 크기가 모든 활성 테이블의 최신 메타데이터 스냅샷 전체를 저장하기에 충분하다고 가정합니다.