데이터를 수정하면 Lakehouse 런타임 카탈로그의 Apache Iceberg 테이블에서 레코드를 업데이트, 삭제, 병합, 자를 수 있습니다.
테이블에서 BigQuery DML을 사용 설정하면 Spark, Trino와 같은 오픈소스 엔진과 함께 BigQuery에서 표준 DML 문을 실행하여 Cloud Storage에 저장된 단일 데이터 사본에 대한 완전한 쓰기 상호 운용성을 달성할 수 있습니다.
시작하기 전에
-
BigLake API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할(roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기 - Apache Iceberg REST 카탈로그 엔드포인트로 Lakehouse 런타임 카탈로그를 설정합니다.
필요한 역할
테이블에서 데이터를 수정하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트 및 스토리지 버킷에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
사용자 인증 정보 제공 모드에서 테이블 데이터 쓰기: BigLake 편집자 (
roles/biglake.editor) - 프로젝트 -
사용자 인증 정보 제공 모드가 아닌 경우 테이블 데이터 쓰기:
- BigLake 편집자 (
roles/biglake.editor) - 프로젝트 - 스토리지 객체 사용자 (
roles/storage.objectUser) - Cloud Storage 버킷
- BigLake 편집자 (
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
테이블 기능 및 지원
Lakehouse 런타임 카탈로그에서 테이블을 사용할 때는 다양한 테이블 유형과 선택 기능에 대해 이해하는 것이 좋습니다. 특히 Apache Iceberg 테이블 사용에 대해 자세히 알아보려면 Apache Iceberg 테이블 개요를 참조하세요.
지원되는 Iceberg 테이블
Apache Iceberg V2 (GA) 및 V3 (미리보기) 테이블만 지원됩니다. Iceberg V1 테이블은 지원되지 않습니다. 기존 V1 테이블을 업그레이드하려면 Iceberg V1 테이블을 V2로 업그레이드하기를 참조하세요.
테이블 옵션 사용 (미리보기)
특정 테이블 속성을 구성하여 BigQuery DML 및 자동 테이블 관리와 같은 BigQuery 관리 기능을 선택할 수 있습니다. 이러한 기능은 테이블이 생성되는 위치에 따라 다양한 방식으로 사용 설정됩니다.
- BigQuery에서: BigQuery DML 및 자동 테이블 관리가 기본적으로 사용 설정됩니다.
- 오픈소스 엔진에서: 선택하려면 테이블 속성을 명시적으로 구성해야 합니다. 자세한 내용은 테이블 옵션 구성을 참조하세요.
데이터 업데이트
테이블에서 기존 행을 업데이트합니다.
Spark
ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;
Trino
ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';
UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;
BigQuery
UPDATE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET data = "updated row"
WHERE id = 1;
다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID Google CloudCATALOG_ID: Lakehouse 런타임 카탈로그 IDNAMESPACE: Iceberg 네임스페이스 이름TABLE_NAME: Iceberg 테이블의 이름
데이터 삭제
테이블에서 특정 행을 삭제합니다.
Spark
ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
DELETE FROM TABLE_NAME WHERE id = 1;
Trino
ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';
DELETE FROM TABLE_NAME WHERE id = 1;
BigQuery
DELETE FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
WHERE id = 1;
데이터 병합
소스 테이블의 데이터를 대상 Iceberg 테이블로 병합합니다.
Spark
ALTER TABLE TARGET_TABLE SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
INSERT (id, data) VALUES (s.id, s.data);
Trino
ALTER TABLE TARGET_TABLE SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';
MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
INSERT (id, data) VALUES (s.id, s.data);
BigQuery
MERGE `PROJECT_ID.CATALOG_ID.NAMESPACE.TARGET_TABLE` t
USING `PROJECT_ID.CATALOG_ID.NAMESPACE.SOURCE_TABLE` s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET data = s.data
WHEN NOT MATCHED THEN
INSERT (id, data) VALUES (id, data);
다음 단계
- 테이블을 쿼리하는 방법을 알아봅니다.
- 테이블 옵션을 구성하는 방법을 알아봅니다.