Lakehouse for Apache Iceberg는 크로스 클라우드 레이크하우스 구성을 통해 원격 데이터 쿼리를 지원합니다. 구성되면 시스템은 BigQuery의 표준 SQL 또는 Managed Service for Apache Spark의 Apache Spark를 사용한 데이터 액세스를 지원합니다.
이 페이지에서는 크로스 클라우드 레이크하우스를 설정한 후 원격 데이터를 쿼리하는 방법을 보여줍니다.
시작하기 전에
데이터를 쿼리하려면 먼저 다음을 완료해야 합니다.
- AWS Glue 또는 Databricks Unity Catalog용 크로스 클라우드 Lakehouse를 설정합니다.
- 원격 카탈로그에 데이터가 있는지 확인합니다.
필요한 역할
연합 데이터를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
BigQuery에서 데이터 쿼리:
BigQuery 데이터 뷰어 (
roles/bigquery.dataViewer) -
BigQuery 작업 실행: BigQuery 작업 사용자 (
roles/bigquery.jobUser) -
레이크하우스 카탈로그에서 테이블 메타데이터를 검색하고 읽습니다.
BigLake 뷰어 (
roles/biglake.viewer)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
데이터 쿼리
연동을 설정한 후 BigQuery의 표준 SQL 또는 Managed Service for Apache Spark의 Apache Spark를 사용하여 원격 데이터를 쿼리할 수 있습니다.
Lakehouse는 메타데이터 변환과 보안 데이터 액세스를 처리하므로 원격 Apache Iceberg 테이블을 Google Cloud 환경의 로컬 테이블처럼 취급할 수 있습니다.
BigQuery에서 쿼리
페더레이션 Apache Iceberg 테이블을 쿼리하려면 표준 BigQuery SQL을 사용하세요. 표 경로는 4부분 구조를 따릅니다.
project.federated_catalog.namespace.table 캐싱, 사용자 인증 정보 제공, CCI 전송 라우팅은 자동으로 처리됩니다.
SELECT user_id, action, COUNT(*) as total_actions FROM `PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME` WHERE event_date >= '2026-04-01' GROUP BY 1, 2;
다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 ID입니다.FEDERATED_CATALOG_NAME: 제휴 카탈로그의 이름입니다.NAMESPACE_NAME: 카탈로그 내의 네임스페이스입니다.TABLE_NAME: 테이블의 이름입니다.REGION: Google Cloud 리전입니다. 예를 들면us-east4입니다.
bq 명령줄 도구를 사용하여 쿼리를 실행할 수도 있습니다.
bq --location="REGION" --project_id="PROJECT_ID" query --use_legacy_sql=false \ "SELECT * FROM \`PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME\` LIMIT 10"
Managed Service for Apache Spark에서 쿼리
X-Iceberg-Access-Delegation=vended-credentials를 사용하여 사용자 인증 정보 제공이 사용 설정된 Managed Service for Apache Spark에 PySpark 일괄 워크로드를 제출합니다. Spark는 별도의 AWS 사용자 인증 정보나 S3 커넥터를 관리할 필요 없이 범위가 지정된 단기 판매 사용자 인증 정보를 사용하여 S3에 안전하게 연결합니다.
Managed Service for Apache Spark의 아웃바운드 연결을 사용 설정합니다.
Managed Service for Apache Spark는 기본 네트워크 구성으로 AWS S3에 연결할 수 없습니다. Cloud Router와 Cloud NAT를 프로비저닝해야 합니다.
gcloud compute routers create lakehouse-router \ --network=NETWORK_NAME \ --region=REGION gcloud compute routers nats create lakehouse-nat \ --router=lakehouse-router \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region=REGION
다음을 바꿉니다.
NETWORK_NAME: Managed Service for Apache Spark 일괄 워크로드의 네트워크입니다 (예:default).REGION: Managed Service for Apache Spark 일괄 워크로드의 리전입니다.
PySpark 애플리케이션 파일을 만들고 PySpark 작업을 실행합니다.
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("CATALOG_NAME").getOrCreate() df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME") df.show(10, truncate=False)
PYSPARK_FILE에서 Cloud Storage에 업로드합니다.
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="\ spark.sql.defaultCatalog=CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.CATALOG_NAME.type=rest,\ spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
다음을 바꿉니다.
NAMESPACE_NAME: 제휴 카탈로그의 네임스페이스입니다.TABLE_NAME: 페더레이션 카탈로그의 테이블 이름입니다.CATALOG_NAME: 로컬 Spark 카탈로그의 이름 (예:my_catalog)PYSPARK_FILE: PySpark 애플리케이션 파일의gs://Cloud Storage 경로입니다.REGION: Managed Service for Apache Spark 일괄 워크로드의 리전입니다.RUNTIME_VERSION: Managed Service for Apache Spark 런타임 버전(예:2.3)PROJECT_ID: Apache Iceberg REST 카탈로그 엔드포인트 사용 요금이 청구되는 프로젝트입니다.FEDERATED_CATALOG_NAME: 제휴 카탈로그의 이름입니다.