크로스 클라우드 데이터 액세스를 설정한 후 여러 소스의 원격 데이터를 쿼리할 수 있습니다. 이 경계 없는 레이크하우스 기능을 사용하면 BigQuery, Apache Spark의 오픈소스 버전 또는 Managed Service for Apache Spark에서 표준 SQL을 사용하여 데이터에 액세스할 수 있습니다. 분석 쿼리 외에도 통합 데이터를 사용하여 AI 기반 통계 및 거버넌스를 수행할 수 있습니다.
- 대화형 분석: 연합 테이블을 비롯한 정확한 데이터 소스를 기반으로 하는 전문 에이전트를 빌드하여 단일 대화에서 여러 클라우드의 데이터를 분석합니다.
- Dataplex Catalog: 연합 데이터 소스를 사용하여 데이터 프로파일링 및 통계를 위해 Knowledge Catalog 기능을 사용합니다.
더 심층적인 통계를 얻으려면 프로젝트, 데이터 세트, 테이블부터 뷰, 그래프, 사용자 정의 함수에 이르기까지 데이터 소스를 기반으로 하는 전문 에이전트를 작성하세요. 데이터가 한곳에 있는 경우는 드물기 때문에 대화형 분석은 BigQuery 표준 테이블을 넘어 Lakehouse에서 관리하는 Apache Iceberg 테이블과 Databricks Unity, AWS Glue, SAP, Salesforce와 같은 Lakehouse 소스까지 지원합니다. 이를 통해 데이터 사일로를 허물고 단일 대화에서 클라우드 전반의 데이터를 분석할 수 있습니다.
이 페이지에서는 크로스 클라우드 데이터 액세스를 설정한 후 원격 데이터를 쿼리하는 방법을 보여줍니다.
시작하기 전에
데이터를 쿼리하려면 다음을 완료해야 합니다.
- 원격 카탈로그에 데이터가 있는지 확인합니다.
- AWS Glue, Databricks Unity Catalog, Snowflake Horizon Catalog, Workday 데이터 레이크 또는 SAP Business 데이터 클라우드의 크로스 클라우드 연결을 설정합니다.
필요한 역할
연합 데이터를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 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=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 엔드포인트 및 할당량 참고).Google 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 --j JOB_ID
statistics.query.objectStorageStats (또는 프로토 API의 경우 object_storage_stats) 아래의 JSON 출력에서 작업 통계는 실행 중에 액세스한 각 클라우드 제공업체의 항목이 포함된 목록을 반환합니다. 각 항목에는 다음 필드가 포함됩니다.
cloudProvider(cloud_provider): 객체 스토리지를 호스팅하는 원격 클라우드 제공업체입니다 (예:AWS또는AZURE).cacheBytesRead(cache_bytes_read): 원격 객체 스토리지 읽기를 방지하여 로컬 Google Cloud 캐시에서 읽은 총 바이트 수입니다.objectStorageBytesRead(object_storage_bytes_read): 원격 클라우드 제공업체의 객체 스토리지에서 직접 읽은 총 바이트 수입니다.
캐싱 개념 및 데이터 레지던시 고려사항에 대한 자세한 내용은 지능형 캐싱을 참고하세요.