크로스 클라우드 레이크하우스 사용

Apache Iceberg용 레이크하우스는 교차 클라우드 레이크하우스 구성을 통해 원격 데이터 쿼리를 지원합니다. 구성되면 시스템은 BigQuery의 표준 SQL, Apache Spark의 오픈소스 버전 또는 Managed Service for Apache Spark를 사용하여 데이터 액세스를 지원합니다. 분석 쿼리 외에도 AI 기반 통계 및 거버넌스를 위해 통합 데이터를 사용할 수 있습니다.

  • Conversational Analytics: 교차 클라우드 테이블을 비롯한 정확한 데이터 소스를 기반으로 하는 전문 에이전트를 빌드하여 단일 대화에서 클라우드 전반의 데이터를 분석합니다.
  • Dataplex Catalog: 통합 데이터 소스를 사용하여 데이터 프로파일링 및 통계를 위한 Knowledge Catalog 기능을 사용합니다.

더 심층적인 통계를 얻으려면 프로젝트, 데이터 세트, 테이블에서 뷰, 그래프, 사용자 정의 함수에 이르기까지 데이터 소스를 기반으로 하는 전문 에이전트를 작성할 수 있습니다. 데이터가 한곳에만 있는 경우는 거의 없으므로 대화형 분석은 BigQuery 표준 테이블을 넘어 레이크하우스 관리형 Apache Iceberg 테이블과 Databricks Unity, AWS Glue, SAP, Salesforce와 같은 교차 클라우드 레이크하우스 소스까지 확장됩니다. 이를 통해 데이터 사일로를 허물고 단일 대화에서 클라우드 전반의 데이터를 분석할 수 있습니다.

이 페이지에서는 교차 클라우드 레이크하우스를 설정한 후 원격 데이터를 쿼리하는 방법을 보여줍니다.

시작하기 전에

데이터를 쿼리하려면 먼저 다음을 완료해야 합니다.

  1. AWS Glue, Databricks Unity Catalog 또는 Snowflake용 교차 클라우드 레이크하우스를 설정합니다.
  2. 원격 카탈로그에 데이터가 있는지 확인합니다.

필요한 역할

통합 데이터를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

데이터 쿼리

통합을 설정한 후에는 BigQuery의 표준 SQL 또는 Managed Service for Apache Spark의 Apache Spark를 사용하여 원격 데이터를 쿼리할 수 있습니다.

Lakehouse는 메타데이터 변환 및 보안 데이터 액세스를 처리하므로 원격 Apache Iceberg 테이블을 마치 로컬 환경에 있는 것처럼 취급할 수 있습니다. Google Cloud

BigQuery에서 쿼리

통합 Apache Iceberg 테이블을 쿼리하려면 표준 BigQuery SQL을 사용합니다. 테이블 경로는 project.federated_catalog.namespace.table의 4부분 구조를 따릅니다. 캐싱, 사용자 인증 정보 제공, 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 Cloud
  • 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에서 쿼리

사용자 인증 정보 제공이 사용 설정된 PySpark 일괄 워크로드를 Managed Service for Apache Spark에 제출합니다. X-Iceberg-Access-Delegation=vended-credentials Spark는 수명이 짧은 범위 지정된 제공된 사용자 인증 정보를 사용하여 별도의 AWS 사용자 인증 정보 또는 S3 커넥터를 관리할 필요 없이 S3에 안전하게 연결합니다.

  1. 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 일괄 워크로드의 리전.
  2. 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=IO_IMPL,\
        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: 통합 카탈로그의 이름입니다.
    • IO_IMPL: 기본 스토리지와 일치하는 FileIO 구현입니다.

    Spark 구성 매개변수

    다음 표에는 모든 연결에 필요한 일반적인 매개변수가 나와 있습니다.

    매개변수 설명
    spark.sql.defaultCatalog 기본 카탈로그 이름입니다.
    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.extensions org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

    다음 표에는 스토리지 제공업체 (<var>IO_IMPL</var>)에 따른 고유한 매개변수가 나와 있습니다.

    스토리지 spark.sql.catalog.CATALOG_NAME.io-impl 참고
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO 사용 설정된 경우 X-Iceberg-Access-Delegation=vended-credentials가 필요합니다.
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO
    Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO

    Snowflake의 경우 STRING 열이 자동으로 스토리지에 최적화되므로 쿼리할 때 문제가 발생할 수 있습니다. 다음 두 가지 방법 중 하나로 이 문제를 해결할 수 있습니다.

    • 옵션 1: Spark에서 벡터화 사용 중지: --properties 플래그에 다음 Spark 구성 속성을 추가합니다.
    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • 옵션 2: Snowflake에서 직렬화 정책 변경: Snowflake의 테이블에 대한 스토리지 직렬화 정책을 COMPATIBLE로 변경합니다.

다음 단계