Lakehouse 런타임 카탈로그, Spark, BigQuery를 사용하여 Iceberg 테이블 쿼리
여러 버킷 카탈로그로 Lakehouse 런타임 카탈로그를 만들어 Lakehouse for Apache Iceberg를 사용하는 방법을 알아봅니다. 이 구성은 오픈소스 처리 엔진을 와 연결하는 관리형 메타데이터 레이어를 설정합니다 Google Cloud.
그런 다음 Managed Service for Apache Spark PySpark 작업을 실행하여 Lakehouse Iceberg REST catalog 테이블을 Apache Iceberg REST catalog 엔드포인트를 사용하여 만듭니다.
그런 다음 BigQuery의 Google Cloud 콘솔
에서 project.catalog.namespace.table 구문을 사용하여 결과 테이블을 직접 쿼리할 수 있습니다.
시작하기 전에
- 계정에 로그인합니다. Google Cloud 를 처음 사용하는 경우 Google Cloud, 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
IAM 역할 부여
Managed Service for Apache Spark PySpark 작업 및 Lakehouse 런타임 카탈로그가 Cloud Storage 및 BigQuery와 함께 작동하도록 하려면 해당 보안 주체에 필요한 역할을 부여하세요.
콘솔에서 **Cloud Shell 활성화** 를 클릭합니다. Google Cloud
승인 을 클릭합니다.
프로젝트의 Compute Engine 기본 서비스 계정에 Dataproc 작업자 역할을 부여합니다. Managed Service for Apache Spark는 Managed Service for Apache Spark 서비스 계정에 설명된 대로 기본적으로 이 역할을 사용합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/dataproc.worker"프로젝트의 Compute Engine 기본 서비스 계정에 서비스 사용량 소비자 역할을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageConsumer"프로젝트의 Compute Engine 기본 서비스 계정에 BigLake 편집자 역할을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/biglake.editor"프로젝트의 Compute Engine 기본 서비스 계정에 BigQuery 데이터 편집자 역할을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/bigquery.dataEditor"다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID Google Cloud
Lakehouse 런타임 카탈로그 만들기
Iceberg 테이블의 메타데이터를 관리할 Lakehouse 런타임 카탈로그를 만듭니다.
Cloud Shell에서 다음 명령어를 실행하여 사용자 인증 정보 제공으로 여러 버킷(
bl://)을 만듭니다.gcloud biglake iceberg catalogs create LAKEHOUSE_CATALOG_ID \ --project=PROJECT_ID \ --catalog-type=biglake \ --default-location=gs://BUCKET_NAME \ --credential-mode=vended-credentials
다음을 바꿉니다.
LAKEHOUSE_CATALOG_ID: 카탈로그의 고유한 이름입니다.PROJECT_ID: 프로젝트 ID입니다. Google CloudBUCKET_NAME: PySpark 애플리케이션 파일이 포함된 Cloud Storage 버킷의 이름입니다.
카탈로그의 서비스 계정에 버킷에 대한 권한을 부여합니다.
콘솔에서 Lakehouse 로 이동합니다. Google Cloud
방금 만든 카탈로그의 이름 (LAKEHOUSE_CATALOG_ID)을 클릭합니다.
인증 방법에서 버킷 권한 설정을 클릭합니다.
대화상자에서 확인 을 클릭합니다. 이렇게 하면 카탈로그의 서비스 계정에 버킷에 대한 스토리지 객체 사용자 역할이 있는지 확인됩니다.
PySpark 작업 만들기 및 실행
Iceberg 테이블을 만들고 쿼리하려면 먼저 필요한 Spark SQL 문으로 PySpark 작업을 만듭니다. 그런 다음 Managed Service for Apache Spark로 작업을 실행합니다.
네임스페이스 및 테이블이 포함된 PySpark 스크립트 만들기
텍스트 편집기에서 다음 콘텐츠가 포함된 quickstart.py라는 파일을 만듭니다.
이 PySpark 스크립트는 Iceberg 카탈로그에서 여러 작업을 수행하기 위해 Spark 세션을 초기화합니다. 스크립트는 먼저 네임스페이스가 아직 없는 경우 네임스페이스를 만듭니다. 그런 다음 기본 스키마로 quickstart_table이라는 Iceberg 테이블을 만듭니다. 테이블이 생성된 후 스크립트는 세 개의 데이터 행을 삽입합니다.
마지막으로 테이블을 쿼리하여 삽입된 모든 레코드를 가져옵니다.
그런 다음 gcloud dataproc
batches submit pyspark 작업을 실행할 때 다음 단계에서 이러한 값이 사용됩니다.
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("quickstart").getOrCreate()
# Create a namespace (dataset) if it doesn't exist
spark.sql("CREATE NAMESPACE IF NOT EXISTS `quickstart_catalog`.quickstart_namespace")
# Create the table
spark.sql("""
CREATE OR REPLACE TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table (
id INT,
name STRING
)
USING iceberg
""")
# Insert data into the table
spark.sql("""
INSERT INTO `quickstart_catalog`.quickstart_namespace.quickstart_table
VALUES (1, 'one'), (2, 'two'), (3, 'three')
""")
Cloud Storage 버킷에 스크립트 업로드
quickstart.py 스크립트를 만든 후 Cloud Storage 버킷에 업로드합니다.
콘솔에서 Cloud Storage 버킷으로 이동합니다. Google Cloud
버킷 이름을 클릭합니다.
객체 탭에서 업로드 > 파일 업로드 를 클릭합니다.
파일 브라우저에서
quickstart.py파일을 선택한 후 열기 를 클릭합니다.
PySpark 작업 실행
quickstart.py 스크립트를 업로드한 후 Managed Service for Apache Spark 일괄 작업으로 실행합니다.
Cloud Shell에서
quickstart.py스크립트를 사용하여 다음 Managed Service for Apache Spark 일괄 작업을 실행합니다.gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
다음을 바꿉니다.
BUCKET_NAME: PySpark 애플리케이션 파일이 포함된 Cloud Storage 버킷의 이름입니다.LAKEHOUSE_CATALOG_ID: BigLake 카탈로그의 이름입니다. 이 이름은 나중에 BigQuery에서 P.C.N.T 구문을 사용하여 카탈로그를 쿼리할 때 사용됩니다. 예를 들면my-project.biglake-catalog.quickstart_namespace.quickstart_table입니다.PROJECT_ID: 프로젝트 ID입니다. Google CloudREGION: Managed Service for Apache Spark 일괄 워크로드를 실행할 리전입니다.
작업이 완료되면 다음과 유사한 출력이 표시됩니다.
Batch [cb9d84e9489d408baca4f9e7ab4c64ff] finished. metadata: '@type': type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata batch: projects/your-project/locations/us-central1/batches/cb9d84e9489d408baca4f9e7ab4c64ff batchUuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 createTime: '2026-01-24T00:10:50.224097Z' description: Batch labels: goog-dataproc-batch-id: cb9d84e9489d408baca4f9e7ab4c64ff goog-dataproc-batch-uuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-drz-resource-uuid: batch-54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-location: us-central1 operationType: BATCH name: projects/your-project/regions/us-central1/operations/32287926-5f61-3572-b54a-fbad8940d6ef
BigQuery에서 테이블 쿼리
콘솔에서 BigQuery 로 이동합니다. Google Cloud
쿼리 편집기에서 다음 문을 입력합니다. 쿼리는
project.catalog.namespace.table구문을 사용합니다.SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID입니다. Google CloudLAKEHOUSE_CATALOG_ID: BigQuery 쿼리에서 사용할 카탈로그 식별자입니다.
실행 을 클릭합니다.
쿼리 결과에는 PySpark 작업으로 삽입한 데이터가 표시됩니다.
정리
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
네임스페이스 (데이터 세트) 및 테이블을 삭제하도록
quickstart.py를 업데이트합니다.from pyspark.sql import SparkSession spark = SparkSession.builder.appName("quickstart").getOrCreate() # Delete the table first, then the namespace (dataset) spark.sql("DROP TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table") spark.sql("DROP NAMESPACE `quickstart_catalog`.quickstart_namespace")Cloud Storage 버킷에 업로드합니다.
콘솔에서 Cloud Storage 버킷으로 이동합니다. Google Cloud
버킷 이름을 클릭합니다.
객체 탭에서 업로드 > 파일 업로드 를 클릭합니다.
파일 브라우저에서
quickstart.py파일을 선택한 후 열기 를 클릭합니다.
Cloud Shell에서 업데이트된
quickstart.py스크립트를 사용하여 다른 Managed Service for Apache Spark 일괄 작업을 실행합니다.gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
다음을 바꿉니다.
BUCKET_NAME: PySpark 애플리케이션 파일이 포함된 Cloud Storage 버킷의 이름입니다.LAKEHOUSE_CATALOG_ID: BigLake 카탈로그의 이름입니다.PROJECT_ID: 프로젝트 ID입니다. Google CloudREGION: Managed Service for Apache Spark 일괄 워크로드를 실행할 리전입니다.
Lakehouse 로 이동합니다.
LAKEHOUSE_CATALOG_ID카탈로그를 선택한 후 삭제 를 클릭합니다.Cloud Storage 버킷 으로 이동합니다.
버킷을 선택하고 삭제 를 클릭합니다.
다음 단계
- Lakehouse 카탈로그를 관리하는 방법을 알아봅니다.
- Lakehouse 런타임 카탈로그에서 지원하는 Apache Iceberg 테이블에 대해 알아봅니다.