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 テーブルを参照する Namespace 名。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 接続を使用して、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 に移行する
- Dataproc で BigQuery Metastore を使用する
- Dataproc Serverless で BigQuery メタストアを使用する