カタログコミットにより、コミット調整がファイル システムから Unity Catalog に移行され、カタログが Delta Lake および Apache Iceberg テーブルの状態について信頼できる唯一の情報源になります。 これにより、マルチテーブル トランザクション、クエリ計画の高速化、すべてのテーブル操作にわたる管理されたアクセスが可能になります。
従来の Delta Lake トランザクションは、個々のテーブル レベルでコミットを調整します。 各テーブルは、独自のトランザクション ログと競合検出を個別に管理します。 コミット調整をカタログ レベルに移行することで、組織は Unity カタログを介して Lakehouse へのすべてのアクセスを一貫して管理できます。 また、Unity カタログでは、Delta Lake の ACID の保証を維持しながら、1 つのトランザクション境界内の複数のテーブル間でコミットを調整することもできます。
利点
カタログ コミットには、次の機能があります。
複数のテーブルにまたがるトランザクション: 1 つのアトミック コミットとして複数のテーブルに対して複数の SQL ステートメントを実行します。 すべての変更が一緒に成功するか、一緒に失敗します。 「トランザクション」を参照してください。
重要
Unity カタログで管理されている Iceberg テーブルに書き込むトランザクションは 、プライベート プレビュー段階にあります。 このプレビューに参加するには、 管理された Iceberg テーブルのプレビュー登録フォームを送信します。
管理アクセス: 読み取りと書き込みは Unity カタログを通じて調整されるため、エンジンは最新のコミット済み状態を確認し、ガバナンス ポリシーが適用されます。
クエリの計画と書き込みの高速化: Unity カタログは、テーブルにアクセスするときにテーブル レベルのメタデータを Delta クライアントに直接通知し、クラウド ストレージをスキップし、メタデータ待機時間の主要なソースを削除します。
強制可能な制約: Unity Catalog はスキーマと制約の変更を検証または拒否し、互換性のない更新によってデータの整合性やダウンストリームのワークロードが損なわれるのを防ぎます。
外部アクセス: 外部エンジンから Unity カタログのマネージド テーブルに安全に書き込みます。 Unity カタログは、データ破損と同時実行の競合を回避するためにコミットを調整します。 外部システム を使用して Databricks データにアクセスするを参照してください。
重要
この機能は ベータ版です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。
必要条件
- テーブルはUnityカタログ管理のテーブル(DeltaまたはIceberg)、ストリーミングテーブルを含むか、マテリアル化されたビューでなければなりません。
- Databricks Runtime 16.4以降は、カタログコミットを有効にした管理テーブルの読み込み、書き込み、作成に必須です。
- Databricks Runtime 18.0以降は、既存の管理テーブルでカタログコミットを有効または無効にする必要があります。
- Databricks Runtime 17.3以降は、カタログコミットを有効にしたストリーミングテーブルやマテリアル化されたビューへの読み書きが必要です。
- Spark Declarative Pipelines では、カタログコミットが有効なストリーミング テーブルまたはマテリアライズド ビューの読み取り、書き込み、作成、アップグレードを行うには、Databricks Runtime 17.3 以降を搭載したサーバーレス コンピュートまたはクラシック コンピュートが必要があります。
- Databricks Runtime 18 LTS以上は、既存のストリーミングテーブルやマテリアライズされたビューでのカタログコミットを無効にするために必要です。
カタログコミットを有効にする
新規または既存の管理テーブル、ストリーミングテーブル、マテリアライズされたビューのカタログコミットを有効にします。
新しい管理テーブルのカタログコミットを有効にする
管理テーブルを作成する際には delta.feature.catalogManaged テーブルプロパティを活用してください:
CREATE TABLE sales_data (
sale_id BIGINT,
amount DECIMAL(10,2),
sale_date DATE
)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');
既存の管理テーブルのカタログコミットを有効にする
ALTER TABLEを使って既存の管理されたテーブルにカタログコミットを追加します:
ALTER TABLE sales_data SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');
重要
既存のテーブルでカタログコミットを有効にすると、テーブルの状態がカタログと同期されます。 書き込み操作の量が多いテーブルでは、この操作に数分かかることがあります。
新規または既存のストリーミングテーブルやマテリアル化されたビューのカタログコミットを有効にする
ストリーミングテーブルまたはマテリアル化されたビュー定義に delta.feature.catalogManaged テーブルプロパティを追加し、その後アップデートを実行します。 既存のオブジェクトについては、元の定義を更新します。
ALTER TABLE ... SET TBLPROPERTIES はサポートされません。
以下の例は、新規または既存のストリーミングテーブルのカタログコミットを可能にします:
CREATE OR REFRESH STREAMING TABLE streaming_sales_data
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported')
AS SELECT * FROM STREAM sales_data;
マテリアル化されたビューの場合、同じテーブルプロパティを CREATE OR REFRESH MATERIALIZED VIEW 定義に用いてください。
カタログのコミットが有効になっているかどうかを確認する
テーブルでカタログ コミットが有効になっているかどうかを確認するには:
DESCRIBE DETAIL sales_data;
有効にすると、catalogManaged列にtableFeaturesが表示されます。
カタログコミットを無効にする
Databricks Runtime 18.0以降を使って、既存の管理テーブルのカタログコミットをオフにしてください。
既存のストリーミングテーブルやマテリアライズされたビューには、Databricks Runtime 18 LTS以上をご利用ください。
Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
Warning
ALTERまたはDROPステートメントの実行中は、アップグレード操作またはダウングレード操作を取り消さないでください。 中断すると、テーブルが部分的にアップグレードまたはダウングレードされた状態になり、将来のすべての読み取りと書き込みからロックされる可能性があります。 元に戻すには、取り消すのではなく、適切なコマンドをもう一度実行します。 テーブルがロックされた場合は、Databricks サポートにお問い合わせください。
制限事項
- 既存の管理テーブルでカタログコミットをオンオフすることは
CREATE OR REPLACE TABLEやREPLACE TABLEでできません。 管理されたテーブルを作成する際にdelta.feature.catalogManagedプロパティでCREATE TABLEを有効にしたり、既存の管理されたテーブルでオンまたはオフにALTER TABLEを使ったりしてください。 - カタログコミットはストリーミングテーブルやマテリアル化されたビューでの外部データアクセスとは互換性がありません。 カタログコミットを使用するには、まず外部アクセスを無効にする必要があります。 ストリーミング テーブルと具体化されたビューへの外部データ アクセスを有効にするを参照してください。
- カタログ コミットが有効になっているテーブルは、クラウド トークンではなく、事前に署名された URL を使用して OpenSharing を介して共有されます。
- シングルユーザー クラスターは、カタログ コミットが有効になっているストリーミング テーブルにアクセスできません。