Lakehouse for Apache Iceberg는 BigQuery 카탈로그 페더레이션이라는 기능을 통해 BigQuery와의 상호 운용성을 제공합니다. 이 기능을 사용하면 BigQuery에서 관리하는 테이블(예: Iceberg 관리 테이블)을 Apache Spark 및 Trino와 같은 외부 오픈소스(OSS) 엔진에 노출할 수 있습니다.
메타데이터를 저장하기 위해 전용 Lakehouse 카탈로그 컨테이너를 만드는 대신 Apache Iceberg REST 카탈로그 엔드포인트는 순전히 프록시 게이트웨이 역할을 합니다. 외부 엔진이 bq:// 웨어하우스 프리픽스를 사용하여 연결하면 게이트웨이는 카탈로그 요청을 BigQuery의 내부 카탈로그로 직접 라우팅합니다.
이를 통해 표준 BigQuery DDL 또는 API를 사용하여 BigQuery 내에서 직접 테이블을 만들고 관리할 수 있으며, 외부 OSS 엔진에는 REST 카탈로그 엔드포인트를 통해 이러한 테이블을 쿼리할 수 있는 읽기 전용 액세스 권한이 부여됩니다.
지원되는 테이블 형식
Apache Iceberg V2 테이블만 지원되며 Iceberg V1 테이블은 지원되지 않습니다. BigQuery 카탈로그에 저장된 기존 Iceberg V1 테이블이 있는 경우 BigQuery 카탈로그 페더레이션과 함께 사용하기 전에 V2로 업그레이드해야 합니다 (예: ALTER TABLE catalog.schema.table SET TBLPROPERTIES ('format-version'='2'); 실행 또는 유사한 엔진 작업 사용).
BigQuery 카탈로그 페더레이션 작동 방식
BigQuery 카탈로그 페더레이션을 사용하면 Lakehouse 런타임 카탈로그 Apache Iceberg REST 카탈로그 엔드포인트를 통해 Iceberg 관리 테이블 및 BigQuery metastore 테이블과 같은 BigQuery 테이블을 노출할 수 있습니다.
BigQuery 카탈로그 페더레이션 흐름은 다음과 같이 작동합니다.
- BigQuery 카탈로그에서 테이블 만들기: DDL 문을 사용하여 BigQuery에서 Iceberg 관리 테이블을 만듭니다. 이 테이블은 BigQuery 카탈로그에 있으며 BigQuery 액세스 제어 목록(ACL)에 의거하여 BigQuery REST 리소스로 작동합니다.
- Lakehouse 런타임 카탈로그에서 BigQuery 웨어하우스로 페더레이션: Lakehouse 런타임 카탈로그 Apache Iceberg REST API를 사용하여
bq://projects/PROJECT_ID웨어하우스 경로 형식 (또는 리전 버전bq://projects/PROJECT_ID/locations/LOCATION)으로 지정된 웨어하우스로 페더레이션합니다. 이렇게 하면 Lakehouse for Apache Iceberg API를 통해 Apache Spark와 같은 컴퓨팅 엔진에서 BigQuery 테이블에 액세스할 수 있습니다. 이 구성에서는 Spark에서 읽기 전용 환경을 제공하지만 BigQuery에서는 읽기-쓰기 환경을 제공합니다.
Apache Iceberg REST 카탈로그 엔드포인트에서 관리하는 테이블과의 비교
BigQuery 카탈로그 페더레이션은 Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 워크플로와 다음과 같은 방식으로 다릅니다.
- 리소스 관리 및 카탈로그 스토리지: 페더레이션 테이블은 BigQuery REST 리소스로 BigQuery 카탈로그에 상주하며 Lakehouse 런타임 카탈로그는 프록시 게이트웨이 역할을 합니다. Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 경우 테이블은 Lakehouse for Apache Iceberg REST 리소스로 카탈로그 내에 직접 저장됩니다.
- 액세스 제어: 페더레이션 테이블은 BigQuery IAM 권한 및 액세스 제어 목록 (ACL)을 사용합니다. Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 경우 테이블은 Lakehouse for Apache Iceberg ACL을 사용합니다.
- 엔진 읽기 및 쓰기 기능: 페더레이션 테이블은 BigQuery를 통한 읽기-쓰기 액세스를 제공하지만 Spark와 같은 외부 엔진에서는 읽기 전용 액세스를 제공합니다. Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 경우 테이블은 BigQuery API와 Spark와 같은 외부 엔진 모두에서 읽기-쓰기 작업을 지원합니다.
시작하기 전에
-
BigLake API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할(roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기
필요한 역할
BigQuery에서 카탈로그 페더레이션을 사용하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
카탈로그 리소스 읽기 및 테이블 데이터 쿼리:
- BigLake 뷰어 (
roles/biglake.viewer) 프로젝트에 대한 - Cloud Storage 버킷에 대한 스토리지 객체 뷰어 (
roles/storage.objectViewer)
- BigLake 뷰어 (
-
BigQuery 카탈로그 페더레이션을 사용하여 DML (Data Manipulation Language) 작업 실행:
- BigQuery 데이터 편집자 (
roles/bigquery.dataEditor) 프로젝트에 대한 - Cloud Storage 버킷에 대한 스토리지 관리자 (
roles/storage.admin). Managed Service for Apache Spark와 같은 쿼리 엔진을 사용하여 DML 작업을 실행하는 경우 해당 엔진에서 작업을 실행하는 데 사용하는 서비스 계정에 이러한 역할을 부여합니다.
- BigQuery 데이터 편집자 (
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
BigQuery 카탈로그 페더레이션 설정
BigQuery 카탈로그 페더레이션을 사용 설정하려면 클라이언트 애플리케이션 구성의 클라이언트 구성 예시에서
WAREHOUSE_PATH 필드에
bq://projects/PROJECT_ID 웨어하우스 형식을 사용하여 클라이언트 (예: Apache Spark 또는 Trino)를 구성합니다.
Configure client application
BigQuery 위치를 포함하여
향후 요청을 단일 위치로 제한할 수도 있습니다.
bq://projects/PROJECT_ID/locations/LOCATION
형식을 사용합니다.
이러한 리소스는 BigQuery에서 관리하므로 해당 필수 권한 이 있어야 합니다.
페더레이션 테이블의 네임스페이스 만들기
BigQuery 카탈로그 페더레이션을 위해 클라이언트를 구성한 후 페더레이션 테이블의 네임스페이스를 만들 수 있습니다.
Spark
BigQuery 카탈로그 페더레이션을 사용하려면 LOCATION 및 DBPROPERTIES 절을 포함합니다.
spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME LOCATION 'gs://BUCKET_NAME/NAMESPACE_NAME' WITH DBPROPERTIES ('gcp-region' = 'LOCATION');") spark.sql("USE NAMESPACE_NAME;")
다음을 바꿉니다.
NAMESPACE_NAME: 네임스페이스의 이름입니다.BUCKET_NAME: 카탈로그와 함께 사용하는 Cloud Storage 버킷입니다.LOCATION: BigQuery 위치입니다. 기본값은US멀티 리전입니다.
Trino
BigQuery 카탈로그 페더레이션을 사용하려면 LOCATION 및 gcp-region 속성을 포함합니다.
CREATE SCHEMA IF NOT EXISTS CATALOG_NAME.SCHEMA_NAME WITH ( LOCATION = 'gs://BUCKET_NAME/SCHEMA_NAME', "gcp-region" = 'LOCATION'); USE CATALOG_NAME.SCHEMA_NAME;
다음을 바꿉니다.
CATALOG_NAME: Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 Trino 카탈로그의 이름입니다.SCHEMA_NAME: 스키마의 이름입니다.BUCKET_NAME: 카탈로그와 함께 사용하는 Cloud Storage 버킷입니다.LOCATION: BigQuery 위치입니다. 기본값은US멀티 리전입니다.
BigQuery에서 페더레이션 테이블 쿼리
페더레이션 카탈로그에서 만든 테이블은 BigQuery에 표시되며 표준 BigQuery SQL을 사용하여 직접 쿼리할 수 있습니다 (4부로 구성된 P.C.N.T 이름이 필요하지 않음).
SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;
다음을 바꿉니다.
NAMESPACE_NAME: 네임스페이스의 이름입니다.TABLE_NAME: 테이블의 이름입니다.