Lakehouse는 Apache Iceberg REST 카탈로그 엔드포인트를 통해 BigQuery 카탈로그로 요청을 라우팅하여 BigQuery와의 상호 운용성을 제공합니다. 이 기능을 사용하면 Iceberg 관리형 테이블과 같이 BigQuery에서 관리하는 테이블을 Apache Spark 및 Trino와 같은 외부 오픈소스 (OSS) 엔진에 노출할 수 있습니다.
메타데이터를 저장하기 위해 전용 Lakehouse 카탈로그 컨테이너를 만드는 대신 Apache Iceberg REST 카탈로그 엔드포인트가 순수하게 프록시 게이트웨이 역할을 합니다. 외부 엔진이 bq:// 웨어하우스 프리픽스를 사용하여 연결하면 게이트웨이가 카탈로그 요청을 BigQuery의 내부 카탈로그로 직접 라우팅합니다.
이렇게 하면 표준 BigQuery DDL 또는 API를 사용하여 BigQuery 내에서 직접 테이블을 만들고 관리할 수 있으며, 외부 OSS 엔진에 REST 카탈로그 엔드포인트를 통해 해당 테이블을 쿼리할 수 있는 읽기 전용 액세스 권한을 부여할 수 있습니다.
REST 카탈로그 엔드포인트를 통해 BigQuery 테이블을 쿼리하는 방법
BigQuery 카탈로그로 요청을 라우팅하면 Lakehouse 런타임 카탈로그 Apache Iceberg REST 카탈로그 엔드포인트를 통해 Iceberg 관리형 테이블 및 BigQuery metastore 테이블과 같은 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)으로 지정된 웨어하우스로 제휴합니다. 이렇게 하면 Apache Iceberg REST 카탈로그 API를 통해 Apache Spark와 같은 Compute Engine에서 BigQuery 테이블에 액세스할 수 있습니다. 이 구성에서는 Spark에서 읽기 전용 환경을, BigQuery에서 읽기-쓰기 환경을 사용할 수 있습니다.
고려사항
BigQuery 카탈로그로 요청을 라우팅해도 전용 Lakehouse 카탈로그 리소스가 생성되지 않으므로 리소스 계층 구조, 버킷 및 카탈로그 리전, 4부분으로 구성된 P.C.N.T 이름 지정 구조와 같은 다른 카탈로그 수준 개념 및 구성은 이 메서드에 적용되지 않습니다. 기본 API에서 이는
CATALOG_TYPE_BIGQUERY구성에 해당합니다. 제휴 BigQuery 카탈로그에는 스토리지 액세스 위임 (사용자 인증 정보 자동 판매)이 지원되지 않습니다.REST 카탈로그 엔드포인트를 통해 BigQuery 테이블을 노출하는 것은 경계 없는 Lakehouse의 크로스 클라우드 데이터 액세스 기능과 다릅니다. 이 워크플로는 Google Cloud 테이블을 외부 OSS 엔진에 노출하는 반면, Lakehouse는 Google Cloud를 Databricks Unity 카탈로그와 같은 원격 외부 카탈로그에 연결하여 데이터를 마이그레이션하지 않고도 다른 클라우드 제공업체에 저장된 데이터를 BigQuery 및 OSS 엔진에서 직접 쿼리할 수 있습니다. 이 워크플로에 대한 자세한 내용은 크로스 클라우드 데이터 액세스 정보를 참조하세요.
Apache Iceberg REST 카탈로그 엔드포인트에서 관리하는 테이블과 비교
REST 카탈로그 엔드포인트를 통해 BigQuery 테이블을 노출하는 것은 Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 워크플로와 다음과 같은 점에서 다릅니다.
- 리소스 관리 및 카탈로그 스토리지: 제휴 테이블은 BigQuery 카탈로그에 BigQuery REST 리소스로 상주하며 Lakehouse 런타임 카탈로그는 프록시 게이트웨이 역할을 합니다. Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 경우 테이블은 Lakehouse REST 리소스로 카탈로그 내에 직접 저장됩니다.
- 액세스 제어: 제휴 테이블은 BigQuery IAM 권한 및 액세스 제어 목록 (ACL)을 사용합니다. Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 경우 테이블은 Lakehouse ACL을 사용합니다.
- 엔진 읽기 및 쓰기 기능: 제휴 테이블은 BigQuery를 통해 읽기-쓰기 액세스를 제공하지만 Spark와 같은 외부 엔진에서는 읽기 전용 액세스를 제공합니다. Lakehouse 런타임 카탈로그가 Apache Iceberg REST 카탈로그 엔드포인트를 사용하는 경우 테이블은 BigQuery API와 Spark와 같은 외부 엔진 모두에서 읽기-쓰기 작업을 지원합니다.
시작하기 전에
-
BigLake API가 아직 사용 설정되지 않았으면 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 필요합니다. 프로젝트를 만든 경우 소유자 역할 (roles/owner)을 통해 이 권한이 이미 있을 수 있습니다. 그렇지 않으면 서비스 사용량 관리자 역할 (roles/serviceusage.serviceUsageAdmin)을 통해 이 권한을 얻을 수 있습니다. 역할 부여 방법 알아보기
필요한 역할
Apache Iceberg REST 카탈로그 엔드포인트를 통해 BigQuery 테이블을 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
카탈로그 리소스 읽기 및 테이블 데이터 쿼리:
- 프로젝트에 대한 BigLake 뷰어 (
roles/biglake.viewer) - Cloud Storage 버킷에 대한 스토리지 객체 뷰어 (
roles/storage.objectViewer)
- 프로젝트에 대한 BigLake 뷰어 (
-
DML (데이터 조작 언어) 작업 수행:
- 프로젝트에 대한 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)를 구성합니다.
또한 BigQuery 위치를 포함하여 bq://projects/PROJECT_ID/locations/LOCATION 형식을 사용하여 향후 요청을 단일 위치로 제한할 수 있습니다.
이러한 리소스는 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에 표시되며 4부분으로 구성된 P.C.N.T 이름 없이 표준 BigQuery SQL을 사용하여 직접 쿼리할 수 있습니다.
SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;
다음을 바꿉니다.
NAMESPACE_NAME: 네임스페이스의 이름입니다.TABLE_NAME: 테이블의 이름입니다.
다음 단계
- Google Cloud 콘솔에서 카탈로그를 관리하는 방법을 알아보세요.
- Lakehouse 런타임 카탈로그에서 지원하는 Apache Iceberg 테이블 알아보기