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

カタログコミット

カタログコミットは、コミット調整をファイルシステムからUnity Catalogに移行し、カタログをDelta LakeとApache Icebergテーブルの状態に対する唯一の信頼できるソースとします。これにより、複数テーブルにわたるトランザクション、高速なクエリ計画、およびすべてのテーブル操作に対するガバナンスされたアクセスが可能になります。

従来の Delta Lake トランザクションは、個々のテーブルレベルでコミットを調整します。各テーブルは、独自のトランザクションログと競合検出を個別に管理します。コミット調整をカタログレベルに移動することで、組織はUnity Catalog を介してレイクハウスへのすべてのアクセスを一貫して管理できます。これにより、Unity Catalog は、Delta Lake の ACID 保証を維持しながら、単一のトランザクション境界内で複数のテーブルにわたるコミットを調整することもできます。

メリット

カタログコミットは以下の機能を提供します。

  • 複数のテーブルにまたがるトランザクション :複数のSQLステートメントを複数のテーブル間で単一のアトミックコミットとして実行します。すべての変更は同時に成功するか、同時に失敗します。「トランザクション」を参照してください。
備考

プレビュー

Unity Catalog で管理される Iceberg テーブルに書き込みを行うトランザクションは、プライベートプレビューで利用可能です。このプレビューに参加するには、マネージド Iceberg テーブル プレビュー登録フォームを送信してください。

  • ガバナンスされたアクセス :読み取りと書き込みはUnity Catalogを通じて調整されるため、エンジンは最新のコミットされた状態を認識し、ガバナンスポリシーが適用されます。

  • クエリ計画と書き込みの高速化: Unity Catalogは、テーブルにアクセスすると、Deltaクライアントにテーブルレベルのメタデータを直接通知し、クラウドストレージをスキップして、メタデータ待機時間の主要な原因を解消します。

  • 適用可能な制約 :Unity Catalog は、スキーマおよび制約の変更を検証または拒否します。これにより、データ完全性やダウンストリームワークロードを破損する可能性のある、互換性のない更新を防ぎます。

  • 外部アクセス:外部エンジンからUnity Catalogマネージドテーブルに安全に書き込みます。Unity Catalog はコミットを調整して、破損と同時実行の競合を防ぎます。外部システムを使用した Databricks データへのアクセスを参照してください。

備考

ベータ版

この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。

要件

  • テーブルは、ストリーミングテーブルやマテリアライズドビューを含む、Unity Catalog マネージドテーブル (Delta または Iceberg) である必要があります。
  • カタログのcommitが有効なマネージドテーブルの読み取り、書き込み、または作成を行うには、Databricks Runtime 16.4以降が必要です。
  • 既存のマネージドテーブルでカタログのcommitを有効または無効にするには、Databricks Runtime 18.0以降が必要です。
  • カタログ commit が有効なストリーミングテーブルまたはマテリアライズドビューの読み取りまたは書き込みを行うには、Databricks Runtime 17.3 以降が必要です。
  • Spark宣言型パイプラインでは、カタログ commit が有効なストリーミングテーブルまたはマテリアライズドビューの読み取り、書き込み、作成、またはアップグレードを行うために、サーバレスコンピュート、または Databricks Runtime 17.3 以降のクラシックコンピュートが必要です。
  • 既存のストリーミングテーブルまたはマテリアライズドビューで catalog commit を無効にするには、Databricks Runtime 18 LTS 以上が必要です。

カタログコミットを有効にする

新規または既存のマネージドテーブル、ストリーミングテーブル、およびマテリアライズドビューに対してカタログの commit を有効にします。

新しいマネージドテーブルに対してカタログの commit を有効にする

マネージドテーブルを作成するときは、delta.feature.catalogManagedテーブル プロパティを使用します。

SQL
CREATE TABLE sales_data (
sale_id BIGINT,
amount DECIMAL(10,2),
sale_date DATE
)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

既存のマネージドテーブルに対してカタログの commit を有効にします

ALTER TABLE を使用して、既存のマネージドテーブルにカタログcommitを追加します:

SQL
ALTER TABLE sales_data SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');
重要

既存のテーブルでカタログコミットを有効にすると、テーブルの状態がカタログと同期されます。この操作は、書き込み操作が大量に行われるテーブルでは、数分かかることがあります。

新規または既存のストリーミングテーブルまたはマテリアライズドビューでカタログ commit を有効にする

delta.feature.catalogManaged テーブルプロパティをストリーミングテーブルまたはマテリアライズドビューの定義に追加してから、更新を実行します。既存のオブジェクトについては、その元の定義を更新します。ALTER TABLE ... SET TBLPROPERTIES はサポートされていません。

次の例では、新規または既存のストリーミングテーブルに対してカタログの commit を有効にします。

SQL
CREATE OR REFRESH STREAMING TABLE streaming_sales_data
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported')
AS SELECT * FROM STREAM sales_data;

マテリアライズドビューの場合は、その CREATE OR REFRESH MATERIALIZED VIEW 定義で同じテーブルプロパティを使用します。

カタログコミットが有効になっているか確認します。

テーブルにカタログコミットが有効になっているかを確認するには、

SQL
DESCRIBE DETAIL sales_data;

有効にすると、catalogManagedtableFeatures列に表示されます。

カタログコミットをオフにする

既存のマネージドテーブルでカタログ commit をオフにするには、Databricks Runtime 18.0 以降を使用してください。

既存のストリーミングテーブルまたはマテリアライズドビューには、Databricks Runtime 18 LTS以降を使用してください。

Delta Lake テーブル機能の削除およびテーブル プロトコルのダウングレードを参照してください。

警告

ALTER または DROP ステートメントの実行中にアップグレードまたはダウングレード操作をキャンセルしないでください。中断が発生すると、テーブルが部分的にアップグレードまたはダウングレードされた状態のままになり、それ以降のすべての読み取りと書き込みがロックされる可能性があります。元に戻すには、キャンセルするのではなく適切なコマンドを再度実行してください。テーブルがロックされた場合は、Databricksサポートにお問い合わせください。

制限事項:

  • CREATE OR REPLACE TABLE または REPLACE TABLE を使用して、既存のマネージドテーブルでカタログの commit を有効または無効にすることはできません。マネージドテーブルの作成時に有効にするには delta.feature.catalogManaged プロパティと共に CREATE TABLE を使用し、既存のマネージドテーブルで有効または無効にするには ALTER TABLE を使用します。

  • カタログの commit は、ストリーミングテーブルまたはマテリアライズドビューでの外部データアクセスとは互換性がありません。カタログの commit を使用するには、最初に外部アクセスを無効にする必要があります。ストリーミングテーブルおよびマテリアライズドビューへの外部データアクセスの有効化を参照してください。

  • カタログコミットが有効になっているテーブルは、OpenSharingを通じて、クラウドトークンの代わりに事前署名付きURLを使用して共有されます。

  • シングルユーザー クラスターでは、カタログ コミットが有効になっているストリーミングテーブルにはアクセスできません。

その他のリソース