이 문서에서는 Spark SQL 및 PySpark 배치 워크로드용 Dataproc Serverless를 실행하여 BigQuery Metastore에 저장된 메타데이터가 포함된 Apache Iceberg 테이블을 만드는 방법을 보여줍니다. Spark 코드를 실행하는 다른 방법에 관한 자세한 내용은 BigQuery 노트북에서 PySpark 코드 실행 및 Apache Spark 워크로드 실행을 참고하세요.
시작하기 전에
아직 만들지 않았다면 Google Cloud 프로젝트와 Cloud Storage 버킷을 만듭니다.
프로젝트 설정
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
프로젝트에 Cloud Storage 버킷을 만듭니다.
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create bucket.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
- For Name your bucket, enter a name that meets the bucket naming requirements.
-
For Choose where to store your data, do the following:
- Select a Location type option.
- Select a Location option.
- For Choose a default storage class for your data, select a storage class.
- For Choose how to control access to objects, select an Access control option.
- For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
- Click Create.
Compute Engine 기본 서비스 계정
PROJECT_NUMBER-compute@developer.gserviceaccount.com
에 BigQuery 데이터 편집자 (roles/bigquery.dataEditor
) 역할을 부여합니다. 자세한 내용은 단일 역할 부여를 참고하세요.Google Cloud CLI 예시:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/bigquery.dataEditor
참고:
- PROJECT_ID 및 PROJECT_NUMBER는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다.
Dataproc 서버리스 일괄 워크로드를 실행할 리전 VPC 서브넷에 비공개 Google 액세스가 사용 설정되어 있는지 확인합니다. 자세한 내용은 Iceberg 테이블 만들기를 참고하세요.
OSS 리소스와 BigQuery 리소스 매핑
오픈소스 리소스와 BigQuery 리소스 용어 간의 매핑은 다음과 같습니다.
OSS 리소스 | BigQuery 리소스 |
---|---|
네임스페이스, 데이터베이스 | 데이터 세트 |
파티션을 나눈 테이블 또는 파티션을 나누지 않은 테이블 | 표 |
보기 | 보기 |
Iceberg 테이블 만들기
이 섹션에서는 Dataproc 서버리스 Spark SQL 및 PySpark 일괄 워크로드를 사용하여 BigQuery Metastore에 메타데이터가 포함된 Iceberg 테이블을 만드는 방법을 보여줍니다.
Spark SQL
Spark SQL 워크로드를 실행하여 Iceberg 테이블 만들기
다음 단계에서는 Dataproc 서버리스 Spark SQL 일괄 워크로드를 실행하여 BigQuery Metastore에 저장된 테이블 메타데이터가 포함된 Iceberg 테이블을 만드는 방법을 보여줍니다.
로컬 또는 Cloud Shell에서 다음 Spark SQL 명령어를
iceberg-table.sql
파일에 복사합니다.USE CATALOG_NAME; CREATE NAMESPACE IF NOT EXISTS example_namespace; DROP TABLE IF EXISTS example_table; CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER'; INSERT INTO example_table VALUES (1, 'first row'); ALTER TABLE example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE example_table;
다음을 바꿉니다.
- CATALOG_NAME: Iceberg 카탈로그 이름입니다.
- BUCKET 및 WAREHOUSE_FOLDER: Iceberg 창고 디렉터리로 사용되는 Cloud Storage 버킷 및 폴더입니다.
iceberg-table.sql
가 포함된 디렉터리에서 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 Spark SQL 워크로드를 제출합니다.gcloud dataproc batches submit spark-sql iceberg-table.sql \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
참고:
- PROJECT_ID: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다.
- REGION: 워크로드를 실행하는 데 사용할 수 있는 Compute Engine 리전입니다.
- BUCKET_NAME: Cloud Storage 버킷 이름입니다. Spark는 일괄 워크로드를 실행하기 전에 이 버킷의
/dependencies
폴더에 워크로드 종속 항목을 업로드합니다. WAREHOUSE_FOLDER는 이 버킷에 있습니다. - SUBNET_NAME: 비공개 Google 액세스가 사용 설정되어 있고 다른 세션 서브넷 요구사항을 충족하는
REGION
의 VPC 서브넷 이름입니다. - LOCATION: 지원되는 BigQuery 위치입니다. 기본 위치는 '미국'입니다.
--version
: Dataproc Serverless 런타임 버전 2.2 이상--properties
카탈로그 속성
BigQuery에서 테이블 메타데이터 보기
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
Iceberg 테이블 메타데이터를 봅니다.
PySpark
다음 단계에서는 Dataproc 서버리스 PySpark 일괄 워크로드를 실행하여 BigQuery Metastore에 저장된 테이블 메타데이터가 포함된 Iceberg 테이블을 만드는 방법을 보여줍니다.
- 로컬 또는 Cloud Shell에서 다음 PySpark 코드를
iceberg-table.py
파일에 복사합니다.catalog = "CATALOG_NAME" namespace = "NAMESPACE" spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;") # Create table and display schema spark.sql("DROP TABLE IF EXISTS example_iceberg_table") spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") spark.sql("DESCRIBE example_iceberg_table;") # Insert table data. spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');") # Alter table, then display schema. spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);") spark.sql("DESCRIBE example_iceberg_table;")
다음을 바꿉니다.
- CATALOG_NAME 및 NAMESPACE: Iceberg 카탈로그 이름과 네임스페이스가 결합되어 Iceberg 테이블 (
catalog.namespace.table_name
)을 식별합니다.
- CATALOG_NAME 및 NAMESPACE: Iceberg 카탈로그 이름과 네임스페이스가 결합되어 Iceberg 테이블 (
-
iceberg-table.py
가 포함된 디렉터리에서 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 PySpark 워크로드를 제출합니다.gcloud dataproc batches submit pyspark iceberg-table.py \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
참고:
- PROJECT_ID: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다.
- REGION: 워크로드를 실행하는 데 사용할 수 있는 Compute Engine 리전입니다.
- BUCKET_NAME: Cloud Storage 버킷 이름입니다. Spark는 일괄 워크로드를 실행하기 전에 이 버킷의
/dependencies
폴더에 워크로드 종속 항목을 업로드합니다. - SUBNET_NAME: 비공개 Google 액세스가 사용 설정되어 있고 다른 세션 서브넷 요구사항을 충족하는
REGION
의 VPC 서브넷 이름입니다. --version
: Dataproc Serverless 런타임 버전 2.2 이상- LOCATION: 지원되는 BigQuery 위치입니다. 기본 위치는 '미국'입니다.
- BUCKET 및 WAREHOUSE_FOLDER: Iceberg 창고 디렉터리로 사용되는 Cloud Storage 버킷 및 폴더입니다.
--properties
: 카탈로그 속성
- BigQuery에서 테이블 스키마를 봅니다.
- Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다. BigQuery Studio로 이동합니다.
- Iceberg 테이블 메타데이터를 봅니다.