경계 없는 레이크하우스에서 크로스 클라우드 연결을 사용하면 클라우드 환경 간에 파일을 이동하지 않고도 외부 플랫폼의 원격 데이터에 액세스할 수 있습니다. 그런 다음 BigQuery, Managed Service for Apache Spark 또는 오픈소스 Apache Spark에서 제휴 테이블을 쿼리할 수 있습니다.
분석 쿼리 외에도 통합 데이터를 AI 기반 인사이트 및 거버넌스에 사용할 수 있습니다.
- 대화형 분석: 제휴 테이블을 포함한 데이터 소스를 기반으로 특수 에이전트를 빌드하여 단일 대화에서 여러 클라우드의 데이터를 분석합니다.
- Knowledge Catalog: 제휴 데이터 소스 전반에서 데이터를 프로파일링하고 인사이트를 생성합니다.
더 심층적인 분석을 위해 프로젝트, 데이터 세트, 테이블, 뷰, 그래프, 사용자 정의 함수를 사용하는 대화형 분석 에이전트를 작성할 수 있습니다. 이러한 에이전트는 BigQuery 표준 테이블, Lakehouse에서 관리하는 Apache Iceberg 테이블, Databricks Unity Catalog, AWS Glue, SAP BDC, Salesforce와 같은 Lakehouse 소스에서 작동합니다.
시작하기 전에
데이터를 쿼리하려면 먼저 다음을 완료해야 합니다.
- 원격 카탈로그에 데이터가 있는지 확인합니다.
- AWS Glue, Databricks Unity Catalog, Snowflake Horizon Catalog, Workday 데이터 레이크 또는 SAP 비즈니스 데이터 클라우드에 대한 크로스 클라우드 연결을 설정합니다.
필요한 역할
제휴 데이터를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 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을 사용합니다. 테이블 경로는 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: 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=IO_IMPL,\ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ 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기본 카탈로그 이름 (예: CATALOG_NAME)입니다.spark.sql.catalog.CATALOG_NAME카탈로그 구현 클래스입니다. org.apache.iceberg.spark.SparkCatalog로 설정합니다.spark.sql.catalog.CATALOG_NAME.type카탈로그 백엔드 유형입니다. Iceberg REST 카탈로그의 경우 rest로 설정합니다.spark.sql.catalog.CATALOG_NAME.uriREST 카탈로그 엔드포인트의 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결제 및 할당량 기여 분석에 사용되는 Google Cloud 프로젝트 ID입니다. PROJECT_ID로 설정합니다.spark.sql.extensionsIceberg SQL 문법 및 기능에 대한 Spark 세션 확장 프로그램입니다. org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions로 설정합니다.다음 표에는 인증 매개변수가 나와 있습니다.
매개변수 설명 spark.sql.catalog.CATALOG_NAME.rest.auth.type커스텀 인증 관리자 클래스입니다. OAuth 흐름 인증의 경우 org.apache.iceberg.gcp.auth.GoogleAuthManager로 설정합니다.spark.sql.catalog.CATALOG_NAME.oauth2-server-uriOAuth2 토큰 서버 엔드포인트 URI입니다. 개인 액세스 토큰 (PAT) 인증의 경우 https://oauth2.googleapis.com/token로 설정합니다.spark.sql.catalog.CATALOG_NAME.tokenBearer 토큰 또는 개인 액세스 토큰 (PAT)입니다. 일반적으로 PAT 인증의 경우 $(gcloud auth application-default print-access-token)로 설정됩니다.다음 표에는 스토리지 제공업체 (
IO_IMPL)에 따른 고유 매개변수가 나와 있습니다.스토리지 spark.sql.catalog.CATALOG_NAME.io-impl참고 Amazon S3 org.apache.iceberg.aws.s3.S3FileIO사용 설정된 경우 사용자 인증 정보 판매 ( X-Iceberg-Access-Delegation=vended-credentials)가 필요합니다.
추가 매개변수:spark.sql.catalog.CATALOG_NAME.s3.region(리전 목록은 Amazon S3 엔드포인트 및 할당량 참조)Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO추가 매개변수: spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/tokenAzure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO추가 스토리지 매개변수는 필요하지 않습니다. Snowflake의 경우
STRING열은 자동으로 스토리지 최적화되므로 쿼리할 때 문제가 발생할 수 있습니다. 다음 두 가지 방법 중 하나로 이 문제를 해결할 수 있습니다.- 옵션 1: Spark에서 벡터화 사용 중지:
--properties플래그에 다음 Spark 구성 속성을 추가합니다. spark.sql.iceberg.vectorization.enabled=falsespark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false옵션 2: Snowflake에서 직렬화 정책 변경: Snowflake에서 테이블의 스토리지 직렬화 정책을
COMPATIBLE로 변경합니다.
캐시 사용량 및 이그레스 비용 절감 모니터링
레이크하우스 캐싱은 모든 크로스 클라우드 쿼리에 자동으로 사용 설정됩니다. 쿼리가 실행되면 Lakehouse는 Google Cloud 스토리지 내에 데이터 블록을 로컬로 자동 캐시합니다. 동일한 데이터 블록을 타겟팅하는 후속 쿼리는 원격 클라우드에서 데이터를 다시 가져오는 대신 로컬 캐시에서 직접 읽습니다.
캐시 적중률을 확인하고 이그레스 비용 절감을 측정하려면 BigQuery 콘솔에서 작업 세부정보를 검사하거나 BigQuery API 또는 bq CLI를 사용하여 쿼리 작업 통계(JobStatistics2)를 검색합니다.
bq show --format=prettyjson --job=true JOB_ID
statistics.query.objectStorageStats (또는 proto API의 object_storage_stats) 아래의 JSON 출력에서 작업 통계는 실행 중에 액세스한 각 클라우드 제공업체의 항목이 포함된 목록을 반환합니다. 각 항목에는 다음 필드가 포함됩니다.
cloudProvider(cloud_provider): 객체 스토리지를 호스팅하는 원격 클라우드 제공업체입니다 (예:AWS또는AZURE).cacheBytesRead(cache_bytes_read): 원격 객체 스토리지 읽기를 방지하여 로컬 Google Cloud 캐시에서 읽은 총 바이트 수입니다.objectStorageBytesRead(object_storage_bytes_read): 원격 클라우드 제공업체의 객체 스토리지에서 직접 읽은 총 바이트 수입니다.
캐싱 개념 및 데이터 레지던시 고려사항에 대한 자세한 내용은 지능형 캐싱을 참조하세요.