ストリーミングテーブルとマテリアライズドビューへの外部データアクセスを有効にする
プレビュー
この機能は パブリック プレビュー段階です。
「Unity Catalog への外部データ アクセスを有効にする」場合は、さらに、パイプラインのデータセットに外部データアクセスを追加することもできます。これにより、外部のDeltaおよびIcebergクライアントは、Unity CatalogおよびIcebergカタログのREST APIを介してデータセットにアクセスできるようになり、完全なデータコピーは不要です。
LakeFlow Spark宣言型パイプラインでは、パイプラインデータセットの外部データアクセスが機能します。
機能
パイプラインのデータセットに外部データアクセスを使用することで、Databricksで利用できる同じデータが、データを重複させることなく公開されます。これにより、パフォーマンスと機能性に関して、次の特性が得られます。
- データコピーは不要です: 完全なデータセットを複製することなく、外部アクセスが有効になります。
- 外部アクセス(APIs経由): Delta Lake または Iceberg の APIs を使用して、マテリアライズドビューとストリーミングテーブルを読み取ります。
- 書き込み後読み取り整合性: 外部リーダーは、データセットの更新後に最新のデータにアクセスでき、データの陳腐化がないことを保証します。更新すると、すぐに反映されます。
- 「 単一テーブルオブジェクト: 」データセットは、Unity Catalog APIs内で、ソースデータセットと同じ名前の マネージドテーブル として外部に表示されます。
- 低コスト: データセット全体がコピーされないため、外部アクセスを提供するオーバーヘッドは低くなります。
要件
データセットの要件は以下のとおりです:
- スキーマで外部アクセスが有効になっている必要があります: ワークスペースは、「パイプライン データセットの外部データ アクセス」パブリック プレビューに登録されており、データセットを含むスキーマで有効になっている必要があります。「Unity Catalog への外部データ アクセスを有効にする」を参照してください。
- Unity Catalog: ストリーミングテーブルとマテリアライズドビューは、Unity Catalogを使用している必要があります。
- Databricks Runtime バージョン: Databricks Runtime 17.3 以降を使用する必要があります。
クライアントの要件は次のとおりです:
- Delta API version: クライアントは、削除ベクトルを含むDelta Lake APIs 4.0.0 以降をサポートする必要があり、アクセスにはUnity CatalogカタログAPIsを使用する必要があります。
- Iceberg API バージョン: または、クライアントは、 Iceberg v3 仕様 をサポートするIceberg カタログ APIs を使用してアクセスできます。
- Unity Catalog の権限: 外部からデータセットを読み取るプリンシパルには、スキーマに対する EXTERNAL USE SCHEMA 特権、およびテーブルに対する
SELECT特権が必要です。
お使いのクライアントがこれらの要件をサポートしていない場合、すべてのDeltaおよびIcebergクライアントをサポートしますが、データセットの完全なコピーを作成する必要がある互換モードを使用することもできます。
データセットへのアクセスを有効にする方法
データセットの外部アクセスを有効にするには、3つのステップがあります。
- データセットの定義で、次の
TBLPROPERTIESを追加します。Iceberg v3 リーダーにのみ必要です。Delta リーダーのみをお持ちの場合は、このステップをスキップできます。
属性 | 使用 |
|---|---|
| Iceberg には列マッピングが必要です。 |
| Iceberg 用に UniForm を有効にします。 |
| UniForm に Iceberg V3 を使用します。 |
| チェンジデータフィードは外部アクセスと互換性がないため、これを |
例えば、LakeFlow Spark宣言型パイプラインで、クエリに以下のTBLPROPERTIESを追加することで、マテリアライズドビューの定義を更新できます。
CREATE OR REFRESH MATERIALIZED VIEW view_name
TBLPROPERTIES(
...
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg',
'delta.enableChangeDataFeed' = 'false')
...
データセットのプロパティを表示するには、DESCRIBE EXTENDED SQL ステートメントを使用します。
2. Iceberg プロパティをパイプラインに適用します。Iceberg v3 リーダーにのみ必要です。Delta リーダーのみをお持ちの場合は、このステップをスキップできます。
- 「トリガーされたパイプライン」:パイプラインを一度実行します。
- 継続的パイプライン :パイプラインを停止し、再起動します。
- パイプラインの構成で、
pipelines.externalMetadata.enabledをtrueに設定します。
- Pipeline settings UI
- Pipeline configuration JSON
- パイプラインを開き、 設定 をクリックします。
- **設定**で、キーと値のペアを追加します:**キー**
pipelines.externalMetadata.enabled、**値**true。 - 保存 をクリックします。
パイプラインのJSONのconfigurationセクションで、以下を追加します。
{
"configuration": {
"pipelines.externalMetadata.enabled": "true"
}
}
設定を保存した後、変更を適用するには、パイプラインを実行または再起動してください。
- 「トリガーされたパイプライン」:パイプラインを一度実行します。
- 継続的パイプライン :パイプラインを停止し、再起動します。
外部クライアントからのデータの読み取り
次のセクションでは、異なるクライアントと環境からデータセットを読み取る方法について説明します。
Spark Delta Reader で Unity REST API を使用
Apache Spark™ バージョン 4.0 以降を使用してください。https://spark.apache.org/downloads.html からダウンロードできます。
- お使いのクラウドプロバイダーに応じて、Delta 4.0とUnity Catalogを使用してSpark SQLシェルを起動するには、次のコマンドを実行します。
- AWS
- Azure
- GCP
bin/spark-sql \
--packages org.apache.spark:spark-hadoop-cloud_2.13:4.0.0,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
bin/spark-sql \
--packages org.apache.hadoop:hadoop-azure:3.3.6,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
bin/spark-sql \
--packages io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
--conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
-
SQLシェルから、Spark SQLでデータセットにアクセスできるようになりました。例えば:
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
Snowflake Iceberg リーダーを使用します
Snowflakeでは、Icebergリーダーを利用できます。これには Iceberg v3 のサポートが必要で、Snowflake では現在プライベートプレビュー中です。
-
Apache Spark で Iceberg REST カタログを設定します。
Shellbin/spark-shell \
--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-aws-bundle:1.8.0 \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.type=rest \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace-url>/api/2.1/unity-catalog/iceberg-rest \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name> -
Snowflake で Iceberg REST カタログをセットアップします。
SQLCREATE OR REPLACE CATALOG INTEGRATION my_uc_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = '<uc-schema-name>'
REST_CONFIG = (
CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
CATALOG_NAME = '<uc-catalog-name>'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = '<PAT>'
)
ENABLED = TRUE;
CREATE OR REPLACE ICEBERG TABLE my_table
CATALOG = 'my_uc_int'
CATALOG_TABLE_NAME = '<uc-table-name>'; -
Spark SQL からデータセットにアクセスできます。
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
Spark Iceberg リーダーで Iceberg REST カタログを使用してください。
Apache Spark™ バージョン 4.0 以降を使用してください。https://spark.apache.org/downloads.html からダウンロードできます。
-
AWS で、Iceberg v3 を使用して Spark SQL シェルを起動するには、次のコマンドを実行します。
Shellbin/spark-sql \
--packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.iceberg:iceberg-aws-bundle:1.10.0 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
--conf spark.sql.catalog.<uc-catalog-name>.type=rest \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url>/api/2.1/unity-catalog/iceberg-rest \
--conf spark.sql.catalog.<uc-catalog-name>.token='<PAT>' \
--conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name> \
--conf spark.sql.iceberg.vectorization.enabled=false -
Spark SQL からデータセットにアクセスできます。
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
互換モードからの移行
現在、互換モードを使用してデータセットを共有している場合は、外部データアクセスへ移行できます。
- データセットへのアクセスを有効にする方法の手順に従って、この機能を有効にしてください。
- 互換モードを無効にしてください。互換モードを無効にするを参照してください。
制限事項:
以下は、ストリーミングテーブルとマテリアライズドビューの外部データアクセスに関する既知の制限事項です。
- 外部書き込み: パイプラインデータセットへの外部書き込みはサポートされていません。
- パスベースのアクセス: パスベースのアクセス(UC API インターフェースではなくストレージロケーションを介して直接読み取る)を必要とする外部リーダーはサポートされていません。パスベースのアクセスをサポートするには、互換モードを使用できますが、データセットの完全なコピーが必要です。
- セキュリティ機能:外部からの読み取りでは、行レベルのセキュリティまたは列レベルのマスキングはサポートされていません。
- タイムトラベルまたはCDF: この機能では、 タイムトラベル または チェンジデータフィード(CDF) はサポートされていません。UniForm Icebergが有効になっている場合、CDFは無効にする必要があります。
- 「カタログコミット」(ベータ): カタログコミット は、外部データアクセスと互換性がありません。ストリーミングテーブルで外部データアクセスを使用するには、まずカタログコミットを無効にする必要があります。カタログのコミットはマテリアライズドビューでは利用できません。
- 取り込みパイプライン: LakeFlow Connect で作成されたストリーミングテーブルは、Iceberg テーブルプロパティの有効化をサポートしておらず、Delta リーダーのみで利用可能です。
- ファブリック: Microsoft Fabricからの読み取りはサポートされていません。
- Snowflake Iceberg リーダー: パイプラインデータセットを読み取るには、Snowflake で Iceberg v3 リーダー(プライベートプレビュー)を使用している必要があります。
- スタンドアロンのマテリアライズドビューとストリーミングテーブル: この機能は、パイプラインによって管理されるマテリアライズドビューとストリーミングテーブルのみサポートされています。マテリアライズドビューとストリーミングテーブルはサポートされていません。スタンドアロンのマテリアライズドビューとストリーミングテーブルに外部アクセスが必要な場合は、Databricks アカウントチームにご連絡ください。