はじめに
本記事の内容は Microsoft Data Analytics Day(Online) 勉強会 2025/11 で発表した内容となります。
発表の録画は YouTube にて公開しております。
互換モードの概要
- Databricks で最適なパフォーマンスを維持しながら、Unity カタログのマネージド テーブル、マテリアライズド ビュー、およびストリーミング テーブルを外部システムから読み取ることができる
- Delta Lake または Iceberg クライアントからアクセスできる、テーブルの読み取り専用バージョンが自動的に生成される
- 2025/11 時点ではパブリック プレビュー機能
互換モードのデモ
事前準備
互換性バージョンのデータとメタデータを保存するためのストレージ(ADLS)を外部ロケーションとして登録しておきます。
また、ターゲットの場所は空にしておく必要があります(他のファイルは置かない)。
マネージド テーブルの作成
まずは、マネージド テーブル (table_01) を作成します。
本記事では以下のように作成しました。
互換モードの有効化
互換モードを有効化するにはテーブル プロパティを設定する必要があります。
delta.universalFormat.compatibility.location では、外部ロケーションとして設定しているストレージ(ADLS)を指定します。
ALTER TABLE <catalog>.<schema>.<table> SET TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'compatibility',
'delta.universalFormat.compatibility.location' = 'abfss://<container>@<adls>.dfs.core.windows.net/<dir>'
)
互換モードが有効になっているか確認
delta.universalFormat.compatibility.targetRefreshInterval (= 更新間隔) の既定値は1時間となっています。手動更新も可能で、テストのため初回は手動で更新しました。
DESC DETAIL <catalog>.<schema>.<table>
REFRESH TABLE <catalog>.<schema>.<table> SYNC UNIFORM
更新間隔について、1時間未満に設定することは非推奨のようです。
ただし、ストリーミング テーブとマテリアライズド ビューの場合、既定値は0分となるようです。
互換性バージョンのデータとメタデータの確認
元の delta テーブルと互換性バージョンを比較すると、データの圧縮形式が変わっている(delta:zstd、互換性バージョン:snappy)ことがわかります。
また、互換性バージョンには Iceberg の metadata が作成されています。
外部クライアントから互換性バージョンを読み取る
本記事では、Microsoft Fabric からの読み取りを検証しました。
まずは Fabric のレイクハウスの Files に、互換モードのデータが格納されている ADLS のショートカットを作成します。
ショートカットから以下のように読み取りが可能となります。
互換モードの制限事項
ドキュメントには以下の制限事項が記載されています。この中の2つを検証みました。
1. タイム トラベル
Fabric で互換モードの過去バージョンの読み取りを実行したところ成功しました。
そのため、タイム トラベルは使える?可能性があります。
2. 特殊文字
特殊文字を列名に持つテーブルを作成して列マッピングを設定します。そして互換モードを有効化します。
Fabric から互換モードを読み取ると、列名の特殊文字が変換されることがわかりました。
類似機能との比較
Microsoft Fabric におけるスキーマ ショートカット
Fabric のスキーマ ショートカット(Hub ストレージ構成)の概要については以下の記事をご参照ください。
Databricks で Variant 型の列を持つテーブルを Hub ストレージ(ADLS)に作成して、互換モードを有効化します。
互換モードの保存場所は上述で実施した Fabric の Files のショートカットに設定した ADLS のディレクトリにしています。
Variant 型は半構造化データを保持することが可能となります。
元テーブルが保存されている Hub ストレージ(ADLS)のフォルダをスキーマ ショートカットに設定します。
Fabric で読み取りを実行したところ、スキーマ ショートカットの場合は読み取りがエラーとなりますが、互換モードの場合は正常に読み取りが可能となることがわかりました。
上記の結果から、互換モードは後方互換性が保証されると考えられます。
Microsoft Fabric における Unity カタログ ミラーリング
Microsoft Fabric の Unity カタログ ミラーリング の概要については以下の記事をご参照ください。
Unity Catalog ミラーリングの制限事項として、ストリーミング テーブルおよびマテリアライズド ビューはサポートされていないことが記載されています。
実際に試してみたところ、Databricks のカタログ(図左)に存在しているストリーミング テーブルおよびマテリアライズド ビューが、Fabric のミラーリング(図右)には表示されないことがわかりました。
上記の結果から、ミラーリングだとDatabricks の Lakeflow 宣言型パイプラインで作成されたデータ(ストリーミング テーブルおよびマテリアライズド ビュー)を Fabric から利用することができないと考えられます。
2025/11 に Lakeflow 宣言型パイプラインの名前が Lakeflow Spark 宣言型パイプライン に変更されました。
互換モードではストリーミング テーブルおよびマテリアライズド ビューをサポートしているため、Fabric から利用することが可能です。
Iceberg 読み取り有効化(UniForm)
Iceberg 読み取りを有効化すると、 Iceberg クライアントが Databricks によって書き込まれた Delta テーブルを読み取れるようになります。
Iceberg 読み取りを有効化するには、delta テーブルに対して削除ベクトルの消去と列マッピングの有効化が必要になります。
ALTER TABLE <catalog>.<schema>.<table> SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
REORG TABLE <catalog>.<schema>.<table> APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
ALTER TABLE <catalog>.<schema>.<table> SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
有効化前後でデータのディレクトリを確認してみると、データは Zstandard 圧縮 Parquet ファイルで変わらないですが、Iceberg の metadata が作成されていることが確認できます。
上記の結果から、互換モードと比較したとき、Iceberg の metadata が元テーブルと同じディレクトリに作成されることがわかります。
また、制限事項としてマテリアライズド ビューまたはストリーミング テーブルはサポートされていないという記載がありました。
マネージド Iceberg テーブル
Databricks では Parquet ファイル形式を使用する Iceberg テーブルがサポートされています。
USING ICEBERG で作成が可能です。
マネージド Iceberg テーブルのディレクトリ構造を確認すると、 _iceberg フォルダと _delta_log フォルダが作成されていることがわかります。
これは、Iceberg テーブルでも DESC HISTORY など Delta Lake のメタデータ操作が可能であることを意味します。
また、データは Zstandard 圧縮 Parquet ファイルとなっています。
各機能の特徴まとめ
ここまでの内容を表にまとめました。
どのようにデータを共有していくかの参考になれば幸いです。
































