추가 BigQuery 메타스토어 기능
BigQuery 메타스토어 구성을 맞춤설정하려면 다음과 같은 추가 기능을 사용하면 됩니다.
- Apache Spark Iceberg 프로시저
- 지원되지 않는 테이블의 필터 옵션
- BigQuery 연결 재정의
Iceberg Spark 프로시저 사용
Iceberg Spark 프로시저를 사용하려면 Spark 구성에 Iceberg SQL 확장 프로그램을 포함해야 합니다. 예를 들어 이전 상태로 롤백하는 프로시저를 만들 수 있습니다.
대화형 Spark-SQL을 사용하여 이전 상태로 롤백
Iceberg Spark 프로시저를 사용하여 테이블을 만들고, 수정하고, 이전 상태로 롤백할 수 있습니다. 예를 들면 다음과 같습니다.
Spark 테이블을 만듭니다.
spark-sql \ --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \ --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \ --conf spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY
다음을 바꿉니다.
CATALOG_NAME
: Spark 테이블을 참조하는 카탈로그 이름입니다.PROJECT_ID
: Google Cloud 프로젝트의 ID입니다.WAREHOUSE_DIRECTORY
: 데이터 웨어하우스가 저장된 Cloud Storage 폴더의 URI입니다.
USE `CATALOG_NAME`; CREATE NAMESPACE NAMESPACE_NAME; USE NAMESPACE NAMESPACE_NAME; CREATE TABLE NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY'; INSERT INTO NAMESPACE_NAME.TABLE_NAME VALUES (1, "first row"); DESCRIBE EXTENDED TABLE_NAME;
다음을 바꿉니다.
NAMESPACE_NAME
: Spark 테이블을 참조하는 네임스페이스 이름입니다.TABLE_NAME
: Spark 테이블을 참조하는 테이블 이름입니다.
출력에는 테이블 구성에 관한 세부정보가 포함됩니다.
... Table Properties [current-snapshot-id=1659239298328512231,format=iceberg/parquet,format-version=2,write.parquet.compression-codec=zstd] ...
테이블을 다시 변경한 다음 이전에 만든 스냅샷
1659239298328512231
으로 롤백합니다.ALTER TABLE TABLE_NAME ADD COLUMNS (newDoubleCol double); INSERT INTO TABLE_NAME VALUES (2, "second row", 2.5); SELECT * FROM TABLE_NAME; CALL CATALOG_NAME.system.set_current_snapshot(NAMESPACE_NAME.TABLE_NAME', SNAPSHOT_ID); SELECT * FROM TABLE_NAME;
다음을 바꿉니다.
SNAPSHOT_ID
: 롤백할 스냅샷의 ID입니다.
출력은 다음과 비슷합니다.
1 first row Time taken: 0.997 seconds, Fetched 1 row(s)
테이블 목록 함수에서 지원되지 않는 테이블 필터링
BigQuery 메타스토어 카탈로그와 함께 Spark SQL을 사용하면 SHOW TABLES
명령어로 지정된 네임스페이스의 모든 테이블(Spark와 호환되지 않는 테이블 포함)이 표시됩니다.
지원되는 테이블만 표시하려면 filter_unsupported_tables
옵션을 사용 설정하세요.
spark-sql --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar \ --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \ --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \ --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \ --conf spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY \ --conf spark.sql.catalog.CATALOG_NAME.filter_unsupported_tables="true"
다음을 바꿉니다.
CATALOG_NAME
: 사용할 Spark 카탈로그의 이름입니다.PROJECT_ID
: 사용할 Google Cloud 프로젝트의 ID입니다.LOCATION
: BigQuery 리소스의 위치입니다.WAREHOUSE_DIRECTORY
: 데이터 웨어하우스로 사용할 Cloud Storage 폴더입니다.
BigQuery 연결 재정의 설정
BigQuery 연결을 사용하여 Cloud Storage와 같이 BigQuery 외부에 저장된 데이터에 액세스할 수 있습니다.
Cloud Storage 버킷에 대한 액세스 권한을 제공하는 BigQuery 연결 재정의를 설정하려면 다음 단계를 완료하세요.
BigQuery 프로젝트에서 Cloud Storage 리소스에 대한 새 연결을 만듭니다. 이 연결은 BigQuery가 데이터에 액세스하는 방식을 정의합니다.
데이터에 액세스하는 사용자 또는 서비스 계정에 연결에 대한
roles/bigquery.connectionUser
역할을 부여합니다.연결 리소스가 BigQuery의 대상 리소스와 동일한 위치를 공유하는지 확인합니다. 자세한 내용은 연결 관리를 참조하세요.
bq_connection
속성을 사용하여 Iceberg 테이블에서 연결을 지정합니다.CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY' TBLPROPERTIES ('bq_connection'='projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID');
다음을 바꿉니다.
TABLE_NAME
: Spark 테이블의 테이블 이름입니다.WAREHOUSE_DIRECTORY
: 데이터를 저장하는 Cloud Storage 버킷의 URI입니다.PROJECT_ID
: 사용할 Google Cloud 프로젝트의 ID입니다.LOCATION
: 연결의 위치입니다.CONNECTION_ID
: 연결의 ID입니다.
다음 단계
- Dataproc Metastore 데이터를 BigQuery Metastore로 이전
- Dataproc에서 BigQuery 메타스토어 사용하기
- Dataproc Serverless에서 BigQuery 메타스토어 사용