其他 BigLake Metastore 功能
如要自訂 BigLake 中繼資料庫設定,您可以使用下列額外功能:
- Apache Spark Iceberg 程序
- 不支援表格的篩選器選項
- BigQuery 連線覆寫值
- BigLake 元資料儲存庫 Iceberg 資料表的存取權控管政策
使用 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.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.1-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)
從表格列表函式中篩除不支援的表格
當您將 Spark SQL 與 BigLake 元資料庫目錄搭配使用時,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.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.1-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 連線存取 BigQuery 以外儲存的資料,例如 Cloud Storage 中的資料。
如要設定可提供 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。
設定存取權控管政策
您可以設定存取控管政策,在 BigLake 元資料儲存庫的 Iceberg 資料表上啟用精細存取控管 (FGAC)。您只能在使用 BigQuery 連線覆寫值的資料表上設定存取權控管政策。您可以透過下列方式設定這些政策:
設定 FGAC 政策後,您可以使用下列範例,從 Spark 查詢資料表:
from pyspark.sql import SparkSession # Create a Spark session spark = SparkSession.builder \ .appName("BigLake Metastore Iceberg") \ .config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \ .config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \ .config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \ .config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \ .config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \ .getOrCreate() spark.sql("USE `CATALOG_NAME`;") # Configure spark for storing temp results spark.conf.set("viewsEnabled","true") spark.sql("CREATE namespace if not exists MATERIALIZATION_NAMESPACE"); spark.conf.set("materializationDataset","MATERIALIZATION_NAMESPACE") spark.sql("USE NAMESPACE DATASET_NAME;") sql = """SELECT * FROM DATASET_NAME.ICEBERG_TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show()
更改下列內容:
CATALOG_NAME
:目錄名稱。PROJECT_ID
:包含 BigQuery 資源的專案 ID。LOCATION
:BigQuery 資源的位置。WAREHOUSE_DIRECTORY
:包含資料倉儲的 Cloud Storage 資料夾 URI。MATERIALIZATION_NAMESPACE
:您要儲存暫時結果的命名空間。DATASET_NAME
:包含您要查詢的資料表的資料集名稱。ICEBERG_TABLE_NAME
:您要查詢的資料表名稱。
後續步驟
- 將 Dataproc Metastore 資料遷移至 BigLake metastore
- 搭配 Dataproc 使用 BigLake 中繼存放區
- 搭配使用 BigLake Metastore 和 Dataproc Serverless