メインコンテンツまでスキップ

ストリーミングテーブルとマテリアライズドビューへの外部データアクセスを有効にする

備考

プレビュー

この機能は パブリック プレビュー段階です。

「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つのステップがあります。

  1. データセットの定義で、次のTBLPROPERTIESを追加します。Iceberg v3 リーダーにのみ必要です。Delta リーダーのみをお持ちの場合は、このステップをスキップできます。

属性

使用

'delta.columnMapping.mode' = 'name'

Iceberg には列マッピングが必要です。

'delta.universalFormat.enabledFormats' = 'iceberg'

Iceberg 用に UniForm を有効にします。

'delta.enableIcebergCompatV3' = 'true'

UniForm に Iceberg V3 を使用します。

'delta.enableChangeDataFeed' = 'false'

チェンジデータフィードは外部アクセスと互換性がないため、これをfalseにする必要があります。

例えば、LakeFlow Spark宣言型パイプラインで、クエリに以下のTBLPROPERTIESを追加することで、マテリアライズドビューの定義を更新できます。

SQL
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 リーダーのみをお持ちの場合は、このステップをスキップできます。

  • 「トリガーされたパイプライン」:パイプラインを一度実行します。
  • 継続的パイプライン :パイプラインを停止し、再起動します。
  1. パイプラインの構成で、pipelines.externalMetadata.enabledtrueに設定します。
  1. パイプラインを開き、 設定 をクリックします。
  2. **設定**で、キーと値のペアを追加します:**キー** pipelines.externalMetadata.enabled 、**値** true
  3. 保存 をクリックします。

設定を保存した後、変更を適用するには、パイプラインを実行または再起動してください。

  • 「トリガーされたパイプライン」:パイプラインを一度実行します。
  • 継続的パイプライン :パイプラインを停止し、再起動します。

外部クライアントからのデータの読み取り

次のセクションでは、異なるクライアントと環境からデータセットを読み取る方法について説明します。

Spark Delta Reader で Unity REST API を使用

Apache Spark™ バージョン 4.0 以降を使用してください。https://spark.apache.org/downloads.html からダウンロードできます。

  1. お使いのクラウドプロバイダーに応じて、Delta 4.0とUnity Catalogを使用してSpark SQLシェルを起動するには、次のコマンドを実行します。
Shell
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>
  1. SQLシェルから、Spark SQLでデータセットにアクセスできるようになりました。例えば:

    Shell
    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;

Snowflake Iceberg リーダーを使用します

Snowflakeでは、Icebergリーダーを利用できます。これには Iceberg v3 のサポートが必要で、Snowflake では現在プライベートプレビュー中です。

  1. Apache Spark で Iceberg REST カタログを設定します。

    Shell
    bin/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>
  2. Snowflake で Iceberg REST カタログをセットアップします。

    SQL
    CREATE 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>';
  3. Spark SQL からデータセットにアクセスできます。

    Shell
    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;

Spark Iceberg リーダーで Iceberg REST カタログを使用してください。

Apache Spark™ バージョン 4.0 以降を使用してください。https://spark.apache.org/downloads.html からダウンロードできます。

  1. AWS で、Iceberg v3 を使用して Spark SQL シェルを起動するには、次のコマンドを実行します。

    Shell
    bin/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
  2. Spark SQL からデータセットにアクセスできます。

    Shell
    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;

互換モードからの移行

現在、互換モードを使用してデータセットを共有している場合は、外部データアクセスへ移行できます。

  1. データセットへのアクセスを有効にする方法の手順に従って、この機能を有効にしてください。
  2. 互換モードを無効にしてください。互換モードを無効にするを参照してください。

制限事項:

以下は、ストリーミングテーブルとマテリアライズドビューの外部データアクセスに関する既知の制限事項です。

  • 外部書き込み: パイプラインデータセットへの外部書き込みはサポートされていません。
  • パスベースのアクセス: パスベースのアクセス(UC API インターフェースではなくストレージロケーションを介して直接読み取る)を必要とする外部リーダーはサポートされていません。パスベースのアクセスをサポートするには、互換モードを使用できますが、データセットの完全なコピーが必要です。
  • セキュリティ機能:外部からの読み取りでは、行レベルのセキュリティまたは列レベルのマスキングはサポートされていません。
  • タイムトラベルまたはCDF: この機能では、 タイムトラベル または チェンジデータフィード(CDF) はサポートされていません。UniForm Icebergが有効になっている場合、CDFは無効にする必要があります。
  • 「カタログコミット」(ベータ): カタログコミット は、外部データアクセスと互換性がありません。ストリーミングテーブルで外部データアクセスを使用するには、まずカタログコミットを無効にする必要があります。カタログのコミットはマテリアライズドビューでは利用できません。
  • 取り込みパイプライン: LakeFlow Connect で作成されたストリーミングテーブルは、Iceberg テーブルプロパティの有効化をサポートしておらず、Delta リーダーのみで利用可能です。
  • ファブリック: Microsoft Fabricからの読み取りはサポートされていません。
  • Snowflake Iceberg リーダー: パイプラインデータセットを読み取るには、Snowflake で Iceberg v3 リーダー(プライベートプレビュー)を使用している必要があります。
  • スタンドアロンのマテリアライズドビューとストリーミングテーブル: この機能は、パイプラインによって管理されるマテリアライズドビューとストリーミングテーブルのみサポートされています。マテリアライズドビューとストリーミングテーブルはサポートされていません。スタンドアロンのマテリアライズドビューとストリーミングテーブルに外部アクセスが必要な場合は、Databricks アカウントチームにご連絡ください。