Iceberg 형식 버전
Foundry는 Iceberg 형식 v2와 v3의 읽기 및 쓰기를 지원합니다. 형식 버전은 파일 및 테이블 메타데이터 규약의 버전이며, 개별 테이블 스키마의 변경 이력 번호와는 다릅니다. 모든 외부 도구가 최신 형식을 지원하는 것은 아닙니다.
기본값과 암호화
| CSE 설정 | 기본 형식 버전 | 이유 |
|---|---|---|
| 클라이언트 측 암호화 꺼짐 | v2 | v3를 지원하지 않는 클라이언트가 아직 있습니다. |
| 클라이언트 측 암호화 켜짐 | v3 | Iceberg table encryption은 v3 기능입니다. |
format-version 속성으로 버전을 명시할 수 있습니다. v2에서 v3로 올릴 수 있지만 v3에서 v2로 내릴 수는 없습니다. 변경 전에 외부 엔진과 Foundry 워크플로의 호환성을 확인합니다.
변환에서 v3 생성
다음은 가상 출력 경로에 두 개의 예시 문자열을 쓰는 PySpark 변환입니다. 실제 출력 위치로 바꾸고 transforms-tables 라이브러리를 사용합니다.
from transforms.api import TransformContext, transform
from transforms.tables import TableOutput, TableTransformOutput
@transform.spark.using(output=TableOutput("/Examples/iceberg/version-three"))
def create_version_three(ctx: TransformContext, output: TableTransformOutput) -> None:
data = ctx.spark_session.createDataFrame([["Hello"], ["World"]], schema=["phrase"])
(
data.writeTo(output.identifier)
.using("iceberg")
.tableProperty("format-version", "3")
.createOrReplace()
)
여기서는 생성 요청 자체에 속성을 붙입니다. 이미 기록한 테이블의 다른 속성을 설정하는 시점은 테이블 속성에서 설명합니다.
기존 테이블의 SQL 변경
Maintenance의 Custom SQL에서 실제 테이블 RID를 사용하여 변경할 수 있습니다. 다음 RID는 가상 값입니다. 이 변경 후 v2로 되돌릴 수 없다는 점을 확인하고 적용합니다.
ALTER TABLE `ri.tables.main.table.00000000-0000-0000-0000-000000000001`
SET TBLPROPERTIES ('format-version' = '3');
외부 PyIceberg 클라이언트
다음 함수는 Foundry Iceberg REST 카탈로그에 연결된 PyIceberg 클라이언트, 테이블 식별자와 Iceberg Schema를 받아 생성 요청을 보냅니다. REST 경로에서는 카탈로그 서버가 테이블 메타데이터를 기록합니다. SqlCatalog처럼 클라이언트가 메타데이터 파일을 직접 기록하는 카탈로그에서는 사용하는 PyIceberg 릴리스의 v3 쓰기 지원도 필요합니다.
def create_version_three_table(catalog, table_identifier, schema):
return catalog.create_table(
table_identifier,
schema=schema,
properties={"format-version": "3"},
)
지원하지 않는 열 자료형
v2의 time은 Foundry에서 지원하지 않습니다. v3에서는 다음 유형이 지원되지 않습니다.
geography
geometry
time
timestamp_ns
timestamptz_ns
unknown
variant
사용 전에 지원되는 유형으로 변환합니다. 나노초 시각은 timestamp_ns를 timestamp로, timestamptz_ns를 timestamptz로 변환하여 마이크로초 정밀도로 사용할 수 있습니다. 더 작은 단위의 정밀도는 손실될 수 있습니다.