其他 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)
从表格列表函数中滤除不受支持的表
将 Spark SQL 与 BigQuery 元存储目录搭配使用时,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 连接来访问存储在 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。
后续步骤
- 将 Dataproc Metastore 数据迁移到 BigQuery Metastore
- 将 BigQuery Metastore 与 Dataproc 搭配使用
- 将 BigQuery 元存储区与 Dataproc Serverless 搭配使用