Apache Iceberg용 레이크하우스는 교차 클라우드 레이크하우스 구성을 통해 원격 데이터 쿼리를 지원합니다. 구성되면 시스템은 BigQuery의 표준 SQL 또는 Managed Service for Apache Spark의 Apache Spark를 사용하여 데이터 액세스를 지원합니다.
이 페이지에서는 교차 클라우드 레이크하우스를 설정한 후 원격 데이터를 쿼리하는 방법을 보여줍니다.
시작하기 전에
데이터를 쿼리하려면 다음을 완료해야 합니다.
- AWS Glue 또는 Databricks Unity Catalog에 교차 클라우드 레이크하우스를 설정합니다.
- 원격 카탈로그에 데이터가 있는지 확인합니다.
필요한 역할
연합 데이터를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 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: 프로젝트 ID입니다. Google CloudFEDERATED_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에서 쿼리
별도의 AWS 사용자 인증 정보 또는 S3 커넥터를 관리하지 않고도 Managed Service for Apache Spark 클러스터에서 교차 클라우드 레이크하우스 데이터를 직접 읽을 수 있습니다. Spark는 BigQuery Storage Read API를 사용하는 대신 표준 Apache Iceberg REST 카탈로그 인터페이스를 사용하여 레이크하우스에 직접 연결합니다.
레이크하우스 REST 엔드포인트로 Managed Service for Apache Spark 작업을 구성하면 레이크하우스는 X-Iceberg-Access-Delegation=vended-credentials를 통해 Spark에 임시 범위 지정 S3 사용자 인증 정보를 자동으로 제공합니다. 이렇게 하면 Spark가 카탈로그의 구성을 준수하면서 기본 데이터를 안전하게 읽을 수 있습니다.
레이크하우스 REST 엔드포인트로 Managed Service for Apache Spark 작업을 구성하려면 다음 단계를 따르세요.
Spark 작업을 구성합니다.
이 명령어에서 Spark 작업을 제출할 때 Apache Iceberg REST 카탈로그 속성을 전달합니다. 이렇게 하면 연합된 레이크하우스 카탈로그가 로컬 Spark 카탈로그 이름 (예:
my_catalog)에 매핑됩니다.gcloud dataproc jobs submit pyspark PYSPARK_SCRIPT_PATH \ --cluster="CLUSTER_NAME" \ --region="REGION" \ --properties="spark.sql.catalog.SPARK_CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.SPARK_CATALOG_NAME.type=rest,\ spark.sql.catalog.SPARK_CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.SPARK_CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\ spark.sql.catalog.SPARK_CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\ spark.sql.catalog.SPARK_CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.SPARK_CATALOG_NAME.rest-metrics-reporting-enabled=false,\ spark.sql.catalog.SPARK_CATALOG_NAME.header.x-goog-user-project=PROJECT_ID"
PySpark에서 데이터를 쿼리합니다.
이 명령어는 Spark를 사용하여 레이크하우스 카탈로그에서 직접 읽은 다음 표준 변환을 실행합니다.
df = spark.table("SPARK_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME") df.filter(df.action == "purchase").show()
다음을 바꿉니다.
PYSPARK_SCRIPT_PATH: PySpark 작업의 경로입니다.CLUSTER_NAME: Managed Service for Apache Spark 클러스터의 이름입니다.REGION: Google Cloud 리전입니다. 예를 들면us-east4입니다.PROJECT_ID: 프로젝트 ID입니다. Google CloudSPARK_CATALOG_NAME: Spark 카탈로그에 사용할 이름입니다.FEDERATED_CATALOG_NAME: 연합된 카탈로그의 이름입니다.NAMESPACE_NAME: 카탈로그 내의 네임스페이스입니다.TABLE_NAME: 테이블의 이름입니다.