Iceberg 함수

Iceberg 함수 (Iceberg Functions)

iceberg 익스텐션은 다음 함수를 제공해요. Iceberg 테이블을 스캔하고 메타데이터, 스냅샷, 프로퍼티를 조회하는 유용한 함수들이에요.

출처: 문서

본문

iceberg 익스텐션은 다음 함수를 제공해요:

함수 설명
iceberg_scan(source) 경로에서 Iceberg 테이블을 읽어요.
iceberg_metadata(source) Iceberg 테이블의 매니페스트 항목을 반환해요.
iceberg_snapshots(source) Iceberg 테이블의 스냅샷을 반환해요.
iceberg_table_properties(table) 지정 테이블의 모든 프로퍼티를 반환해요.
iceberg_schema_properties(schema) 지정 스키마의 모든 프로퍼티를 반환해요.
set_iceberg_schema_properties(schema, properties) 지정 스키마에 프로퍼티를 설정해요.
remove_iceberg_schema_properties(schema, property_list) 지정 스키마에서 프로퍼티를 제거해요.
iceberg_to_ducklake(iceberg_catalog, ducklake_catalog) 카탈로그의 Iceberg 메타데이터를 DuckLake 카탈로그로 복사해요.

이 페이지의 예시는 iceberg_data.zip 파일을 사용해요. 실행하려면 다운로드하고 압축을 풀어요.

iceberg_scan

iceberg_scan 함수는 연결된 카탈로그 없이 경로에서 Iceberg 테이블을 읽어요:

SELECT count(*)
FROM iceberg_scan('data/iceberg/lineitem_iceberg', allow_moved_paths = true);
count_star()
51793

경로는 메타데이터 파일을 직접 가리킬 수도 있고, S3나 Azure Blob Storage 같은 객체 스토어를 가리킬 수도 있어요. 이 함수가 받는 파라미터는 Iceberg Options 페이지를 참고해요.

iceberg_metadata

Iceberg 메타데이터에 접근하려면 iceberg_metadata 함수를 사용할 수 있어요:

SELECT *
FROM iceberg_metadata('data/iceberg/lineitem_iceberg', allow_moved_paths = true);
manifest_path manifest_sequence_number manifest_content status content file_path file_format record_count
lineitem_iceberg/metadata/10eaca8a-1e1c-421e-ad6d-b232e5ee23d3-m1.avro 2 DATA ADDED EXISTING lineitem_iceberg/data/00041-414-f3c73457-bbd6-4b92-9c15-17b241171b16-00001.parquet PARQUET 51793
lineitem_iceberg/metadata/10eaca8a-1e1c-421e-ad6d-b232e5ee23d3-m0.avro 2 DATA DELETED EXISTING lineitem_iceberg/data/00000-411-0792dcfe-4e25-4ca3-8ada-175286069a47-00001.parquet PARQUET 60175

iceberg_snapshots

Iceberg 테이블의 스냅샷을 시각화하려면 iceberg_snapshots 함수를 사용해요:

SELECT *
FROM iceberg_snapshots('data/iceberg/lineitem_iceberg');
sequence_number snapshot_id timestamp_ms manifest_list
1 3776207205136740581 2023-02-15 15:07:54.504 lineitem_iceberg/metadata/snap-3776207205136740581-1-cf3d0be5-cf70-453d-ad8f-48fdc412e608.avro
2 7635660646343998149 2023-02-15 15:08:14.73 lineitem_iceberg/metadata/snap-7635660646343998149-1-10eaca8a-1e1c-421e-ad6d-b232e5ee23d3.avro

iceberg_snapshotsallow_moved_paths, snapshot_from_id, snapshot_from_timestamp를 파라미터로 받지 않아요.

연결된 카탈로그의 메타데이터 연산 (Metadata Operations on Attached Catalogs)

iceberg_metadataiceberg_snapshots 함수는 연결된 Iceberg 카탈로그에서 정규화된 경로로도 사용할 수 있어요. 예:

SELECT * FROM iceberg_metadata(my_datalake.default.t)

-- 또는
SELECT * FROM iceberg_snapshots(my_datalake.default.t)

이 기능으로 사용자는 **시간 여행(time traveling)**을 할 수 있어요.

-- 스냅샷 id 사용
SELECT * FROM my_datalake.default.t AT (VERSION => ⟨SNAPSHOT_ID⟩)

-- 또는 타임스탬프 사용
SELECT * FROM my_datalake.default.t AT (TIMESTAMP => TIMESTAMP '2025-09-22 12:32:43.217')

테이블 프로퍼티 함수 (Table Properties Functions)

DuckDB는 Iceberg 테이블 프로퍼티를 보고 수정하는 함수를 제공해요:

함수 설명
iceberg_table_properties(table) 지정 테이블의 모든 프로퍼티를 반환해요.

ALTER TABLE ... SETALTER TABLE ... RESET로 테이블 프로퍼티를 수정할 수 있어요

-- 테이블 프로퍼티 보기
SELECT *
FROM iceberg_table_properties(iceberg_catalog.default.my_table);

-- 테이블 프로퍼티 설정
ALTER TABLE iceberg_catalog.default.my_table SET (
    'write.update.mode'='merge-on-read', 
    'write.delete.mode'='merge-on-read',
    'format-version'=3
);

-- 테이블 프로퍼티 제거
ALTER TABLE iceberg_catalog.default.my_table RESET (
    'write.update.mode',
    'owner'
);

스키마 프로퍼티 함수 (Schema Properties Functions)

Iceberg 카탈로그는 임의의 키-값 프로퍼티를 스키마(namespace) 수준에서 연결할 수 있어요. 이 프로퍼티는 일반적으로 소유권, 설명, 기본 저장 위치, 또는 스키마의 모든 테이블에 적용되는 기타 메타데이터를 기록하는 데 사용돼요.

함수 설명
iceberg_schema_properties(schema) 지정 스키마의 모든 프로퍼티를 반환해요.
set_iceberg_schema_properties(schema, properties) 지정 스키마에 프로퍼티를 설정해요.
remove_iceberg_schema_properties(schema, property_list) 지정 스키마에서 프로퍼티를 제거해요.
-- 스키마 프로퍼티 설정
CALL set_iceberg_schema_properties(iceberg_catalog.default, {
    'owner': 'analytics-team',
    'description': 'Default analytics schema'
});

-- 스키마 프로퍼티 읽기
SELECT * FROM iceberg_schema_properties(iceberg_catalog.default);

-- 스키마 프로퍼티 제거
CALL remove_iceberg_schema_properties(
    iceberg_catalog.default,
    ['description']
);

스키마 프로퍼티는 Iceberg REST Catalog를 통해 쓰여지므로, 같은 카탈로그에 연결된 다른 Iceberg 인식 엔진도 업데이트를 즉시 볼 수 있어요. remove_iceberg_schema_properties는 남은 스키마 프로퍼티 수를 반환해요.

iceberg_to_ducklake

DuckDB iceberg 익스텐션은 Iceberg 메타데이터를 DuckLake로 메타데이터 전용 복사를 하는 함수를 노출해요. 이를 통해 사용자는 Iceberg 테이블을 DuckLake 테이블처럼 쿼리할 수 있어요.

-- Iceberg 카탈로그가 iceberg_datalake로 별칭되어 연결되어 있다고 가정
ATTACH 'ducklake:my_ducklake.ducklake' AS my_ducklake;

CALL iceberg_to_ducklake('iceberg_datalake', 'my_ducklake');

skip_tables 파라미터를 제공해 테이블 집합을 건너뛸 수도 있어요.

CALL iceberg_to_ducklake('iceberg_datalake', 'my_ducklake', skip_tables := ['table_to_skip']);

더 알아보기 (Learn more)