Microsoft Fabric Lakehouse and Delta Tablesの変更点|V-Order・Deltaテーブル最適化の確認ポイント

Microsoft Fabricの「Lakehouse and Delta Tables – Microsoft Fabric」を確認する読者が最初に押さえるべき結論は、Fabric LakehouseではDelta Lakeテーブルが標準であり、今回の公式情報では特にV-OrderとOptimize Writeの既定値の扱いが整理されたという点です。新規ワークスペースと既存ワークスペースで挙動が異なる可能性があるため、管理者はSpark設定、ランタイム、テーブル最適化方針を確認し、開発者はNotebookやパイプライン内で暗黙の既定値に依存していないかを点検する必要があります。公式ページは2026年5月20日に更新され、GitHub上の変更履歴でも既定値の不整合を修正するコミットが確認できます。 (Microsoft Learn)

目次

2026年5月20日の更新で確認すべきポイント

今回の更新は、「Delta Lakeを使うべきか」という選定の話ではなく、Fabric LakehouseでDeltaテーブルをどう扱い、どの最適化設定を前提に運用するかを見直す内容として読むべきです。

特に重要なのは、Azure Synapse Analyticsからの移行や、2025年4月以前に作成したFabricワークスペースを運用している組織です。公式ドキュメントの差分では、spark.sql.parquet.vorder.default が従来の true 表記から false* に、spark.databricks.delta.optimizeWrite.enabled が true から unset (false)* に修正されました。注記では、2025年4月より前に作成されたFabricワークスペースではV-OrderとOptimize Writeが既定で有効だった一方、新しいワークスペースではFabric Spark Runtime 1.3でこれらの機能が無効、Runtime 2.0ではOptimize Writeが UNSET であると説明されています。 (GitHub)

確認項目公式情報の要点実務での影響
Delta Lake形式Fabric LakehouseではDelta Lakeが既定のテーブル形式CSVやParquetを扱っていても、テーブルとして管理する場合はDelta前提で設計する
V-Orderの既定値新規ワークスペースではV-Orderが既定で無効ダッシュボードや反復クエリで読み取り性能を重視する場合は明示的な有効化を検討する
Optimize Writeワークスペース作成時期とランタイムで既定値が異なる既存環境と新規環境でファイルサイズや書き込み性能が変わる可能性がある
Azure Synapseからの移行Synapseの既定テーブル形式はParquet、FabricはDelta移行時にテーブル形式、Spark設定、ライブラリ、Notebookの前提を点検する
ショートカットDeltaテーブルとファイル/フォルダーで配置先の推奨が異なるSQL分析エンドポイントで使いたいDeltaテーブルはTables側に配置する
テーブル最適化自動最適化に任せるだけでなく、必要に応じてOPTIMIZEやVACUUMを使う大規模テーブル、頻繁な書き込み、Direct Lake用途では保守設計が必要

Fabric LakehouseではDelta Lakeテーブルが標準になる

Microsoft Fabric Lakehouseでは、データをテーブルとして保存する場合、Delta Lakeが既定の形式です。Delta Lakeは、トランザクション整合性、整合性チェック、クエリ性能の改善を支える形式で、Power BI、Notebook、パイプラインなどFabric内の複数サービスとの連携を前提に設計されています。 (Microsoft Learn)

初心者が混乱しやすいのは、「CSVやParquetもサポートされているなら、Deltaでなくてもよいのでは」という点です。実務では次のように考えると判断しやすくなります。

データの状態推奨される扱い理由
分析やPower BIで継続利用するデータDeltaテーブルとしてLakehouseのTablesに置くSQL分析エンドポイントやFabric内の各機能と連携しやすい
一時的に取り込んだCSVやJSONFilesに置いてSparkで処理し、必要に応じてDelta化する生データと分析用テーブルを分けられる
既存のParquetファイルそのまま読むか、性能要件がある場合はDeltaテーブルへ変換するDeltaのトランザクション管理や最適化を活用できる
外部ストレージ上のDeltaテーブルTables側にショートカットを作成するLakehouse上でテーブルとして認識され、SQLクエリ対象にしやすい

つまり、Fabric Lakehouseの運用では「ファイルを置く場所」と「テーブルとして管理する場所」を分けて考えることが重要です。探索や前処理はFiles、本番分析や共有はTables、という分離が基本になります。

V-OrderとOptimize Writeの既定値は必ず確認する

今回の更新で最も注意すべきなのは、V-OrderとOptimize Writeを「Fabricでは常に既定で有効」と思い込まないことです。

V-OrderはParquetファイルの書き込み時最適化で、ダッシュボード、対話型分析、反復的なスキャンのような読み取り中心のワークロードで効果を期待できます。一方で、書き込みに時間がかかる可能性があり、公式情報では平均的に約15%の書き込み時間増加が起こり得ると説明されています。新規Fabricワークスペースでは、書き込み中心のデータエンジニアリングワークロードを考慮して、V-Orderは既定で無効です。 (Microsoft Learn)

管理者が最初に見るべき設定

Fabric管理者やワークスペース管理者は、次の3点を確認してください。

確認対象確認理由具体的な見方
ワークスペース作成時期2025年4月以前とそれ以降で既定挙動が異なる可能性がある既存環境と新規環境のSpark設定を比較する
Fabric Spark RuntimeRuntime 1.3と2.0でOptimize Writeの扱いが変わるEnvironmentまたはワークスペース設定でランタイムを確認する
Spark設定NotebookやSpark Job Definitionが暗黙の既定値に依存していないか確認するspark.sql.parquet.vorder.default などを明示的に確認する

V-Orderのセッション設定は、Notebookで次のように確認できます。 (Microsoft Learn)

spark.conf.get("spark.sql.parquet.vorder.default")

読み取り中心のテーブルでV-Orderを有効にしたい場合は、セッション単位で次のように設定できます。

spark.conf.set("spark.sql.parquet.vorder.default", "true")

逆に、取り込みや変換の書き込み速度を優先する処理では、明示的に無効化しておくと、環境差による挙動のブレを抑えられます。

spark.conf.set("spark.sql.parquet.vorder.default", "false")

旧設定を使っているコードは修正する

Fabric Runtime 1.3以降では、spark.sql.parquet.vorder.enable は削除されています。以前のNotebookや移行元コードにこの設定が残っている場合は、spark.sql.parquet.vorder.default、テーブルプロパティ、または書き込みオプションで制御する形に見直します。 (Microsoft Learn)

特にAzure Synapse Analyticsから移行したコードでは、Spark設定の名前、テーブル形式、ライブラリ管理、ジョブ定義の違いをまとめて確認する必要があります。FabricではSpark構成がEnvironmentやNotebook/Spark Job Definition単位で扱われるため、Synapseのプール単位設定をそのまま移すだけでは期待どおりにならない場合があります。 (Microsoft Learn)

V-Orderは「全部有効」ではなく用途で使い分ける

V-Orderは便利ですが、すべてのDeltaテーブルで有効化すればよいわけではありません。判断基準はシンプルです。

ワークロードV-Orderの考え方理由
Power BIレポート、Direct Lake、定期的な集計参照有効化を検討する同じテーブルを繰り返し読むため、読み取り効率の改善が効きやすい
大量データの初回取り込み無効のまま始めることを検討する書き込み時間を優先した方がよい場合がある
ストリーミングやマイクロバッチ慎重に検証する書き込み遅延がSLAに影響する可能性がある
一時テーブル、検証用テーブル原則として不要最適化コストに見合わないことが多い
大規模な本番分析テーブルテーブル単位またはOPTIMIZE時に制御する読み取り性能と保守コストのバランスを取りやすい

テーブル単位でV-Orderの既定値を持たせたい場合は、Deltaテーブルのプロパティを使います。ただし、テーブルプロパティの変更は将来の書き込みに影響するもので、既存ファイルの物理レイアウトを自動的に書き換えるわけではありません。既存データに適用したい場合は、OPTIMIZEなどで再編成する必要があります。 (Microsoft Learn)

ALTER TABLE sales.orders
SET TBLPROPERTIES ("delta.parquet.vorder.enabled" = "true");

一時的に特定の書き込みだけV-Orderを使いたい場合は、DataFrame writerのオプションで制御します。

df.write \
  .format("delta") \
  .mode("append") \
  .option("parquet.vorder.enabled", "true") \
  .saveAsTable("sales.orders")

Load to tablesを使う場合の注意点

FabricポータルのLakehouseでは、CSVやParquetファイルをDeltaテーブルへ変換する「Load to tables」を使えます。単一ファイルまたはフォルダーを起点に、新規テーブルまたは既存テーブルへ読み込めるため、GUIで手早くLakehouseテーブルを作りたい場合に便利です。 (Microsoft Learn)

ただし、現行のLoad to tablesでは、Lakehouseホームページからカスタム列スキーマを明示的に定義できません。列名やデータ型を厳密に制御したい場合は、Notebookを使って読み込み処理を書く方が安全です。 (Microsoft Learn)

ケースLoad to tablesでよいか補足
小規模なCSVを試しにテーブル化する向いているGUIで素早くDeltaテーブル化できる
列名・データ型を厳密に指定したいNotebook推奨スキーマ推論に任せると意図しない型になることがある
フォルダー内の複数CSVをまとめて読み込む条件付きで可同じファイル形式でそろえる必要がある
本番パイプラインに組み込むNotebookまたはパイプライン推奨再現性、ログ、エラー処理を管理しやすい

失敗しやすいポイントは、CSVのヘッダーや区切り文字です。ヘッダーを使わない場合、列名が _c0、_c1 のような既定名になるため、後続のPower BIレポートやSQLクエリで扱いにくくなります。最初から本番利用を想定するテーブルでは、Notebookでスキーマを明示する運用をおすすめします。

ショートカットはTablesとFilesを使い分ける

OneLakeショートカットは、外部データや別ワークスペースのデータをコピーせずに参照できる仕組みです。ただし、Lakehouse内でどこにショートカットを作るかによって、テーブルとしての扱いが変わります。

公式情報では、Deltaテーブルをテーブルとして認識させたい場合はTablesセクションにショートカットを作ることが推奨されています。一方、ファイルやフォルダー、レガシーHiveテーブルなどはFilesセクションに置き、Sparkで読み込んだうえで必要に応じてLakehouseネイティブのDeltaテーブルに変換するのが実務的です。 (Microsoft Learn)

ショートカット先のデータ作成場所実務上の使い方
単一のDelta LakeテーブルTablesSparkとSQL分析エンドポイントからテーブルとして使う
複数のDeltaテーブルを含むフォルダーTables側のスキーマショートカットスキーマ配下のテーブル群として扱う
CSV、JSON、Parquetなどのファイル群FilesSparkで読み込み、必要ならDeltaテーブル化する
外部ストレージ上のレガシーHiveテーブルFilesSparkまたは外部テーブル参照で扱い、必要ならDeltaへ移行する

注意したいのは、外部DeltaテーブルをSparkコードで作成しただけでは、SQL分析エンドポイントに自動表示されない場合がある点です。SQLクエリやPower BIから使いたい外部Deltaテーブルは、Tablesセクションにショートカットを作成して認識させる流れを確認してください。 (Microsoft Learn)

Deltaテーブルの性能を保つにはOPTIMIZEとVACUUMを設計する

Deltaテーブルは作ったら終わりではありません。取り込み、更新、削除、MERGE、上書きが続くと、小さなファイルが増えたり、参照されなくなった古いファイルが残ったりします。そのまま放置すると、クエリのスキャン効率が下がり、ストレージコストも増えやすくなります。

FabricのDeltaテーブル保守では、主に次の操作を使い分けます。公式情報では、OPTIMIZE、VACUUM、REORG、統計情報、Auto compactionなどがDeltaテーブル保守の主要な要素として整理されています。 (Microsoft Learn)

操作目的実行タイミングの例
OPTIMIZE小さなファイルをまとめ、読み取り効率を改善する大量取り込み後、ファイル数が増えたとき、定期メンテナンス時
OPTIMIZE ... ZORDER BYよく一緒に絞り込む列でデータ配置を最適化する日付と顧客IDなど、選択性の高い複数列で頻繁にフィルターする場合
OPTIMIZE ... VORDER対象ファイルにV-Orderを適用する読み取り中心の分析テーブルを再編成したい場合
VACUUM参照されなくなった古いデータファイルを削除する更新・削除・MERGE・OPTIMIZE後のストレージ回収
REORG TABLE ... APPLY (PURGE)削除ベクトルで論理削除された行を物理的に整理するコンプライアンス要件など、明示的な物理削除が必要な場合

基本的なOPTIMIZEは次のように実行します。

OPTIMIZE sales.orders;

V-Orderを明示的に適用したい場合は、次のように指定します。

OPTIMIZE sales.orders VORDER;

Z-OrderとV-Orderは組み合わせることもできます。この場合、Fabric Sparkではbin compaction、Z-Order、V-Orderの順で処理されます。 (Microsoft Learn)

OPTIMIZE sales.orders
ZORDER BY (order_date, customer_id)
VORDER;

運用では、DESCRIBE DETAIL と DESCRIBE HISTORY を使って、ファイル数、サイズ、最適化履歴を確認してからメンテナンスするのが安全です。 (Microsoft Learn)

DESCRIBE DETAIL sales.orders;
DESCRIBE HISTORY sales.orders;

Auto compactionは便利だが万能ではない

Auto compactionは、書き込み後にファイルの断片化を評価し、小さなファイルが多すぎる場合に同期的なOPTIMIZEを実行する仕組みです。頻繁な小規模書き込みやマイクロバッチでは有効ですが、書き込み直後に追加処理が走るため、書き込み遅延が許容できるかを確認する必要があります。 (Microsoft Learn)

セッション単位で有効化する例は次のとおりです。

spark.conf.set("spark.databricks.delta.autoCompact.enabled", True)

既存テーブルで有効化する場合は、テーブルプロパティを使います。

ALTER TABLE sales.orders
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true');

Auto compactionを有効にする判断基準は、次のように考えると実務で迷いにくくなります。

状況判断
数分おきに小さなデータを書き込む有効化を検討する
夜間バッチで大きなファイルをまとめて書き込む手動OPTIMIZEで十分な場合が多い
書き込み遅延を極力避けたいまず無効で運用し、定期OPTIMIZEを検討する
Power BI向けの共有テーブルAuto compactionと定期OPTIMIZEを組み合わせる
検証用・一時テーブル原則不要

管理者が確認すべき設定

管理者は、個別のNotebookだけでなく、ワークスペース全体のSpark設定とEnvironmentを確認する必要があります。Fabricでは、ワークスペース作成時にスタータープールが自動作成され、管理者は必要に応じてカスタムSparkプール、Environment、ランタイム、ジョブ設定などを調整できます。Spark設定を変更するには、ワークスペースの管理者ロールが必要です。 (Microsoft Learn)

確認すべき項目は次のとおりです。

対象確認内容影響
Workspace settingsData Engineering/Science配下のSpark設定ワークスペース内のNotebookやSpark Job Definitionの既定動作
Environment使用するFabric Runtime、ライブラリ、Sparkプロパティランタイム差分や依存関係の不整合
Starter Pool / Custom Spark Poolノード、オートスケール、動的割り当て処理性能、起動時間、コスト
Job settingsジョブ受付、セッションタイムアウト同時実行や長時間ジョブの安定性
High concurrency複数NotebookでのSparkセッション共有チーム開発や同時利用時の効率

特にRuntime変更時は、Spark、Python、Scala、Java、Delta Lakeのバージョンが変わります。公式情報では、2026年4月24日時点で本番ワークロードには最新の一般提供版Runtimeを使うことが推奨され、Runtime 1.3がGA、Runtime 2.0はPublic Previewとして掲載されています。 (Microsoft Learn)

開発者がコードで確認すべきポイント

開発者は、次のような「暗黙の既定値に依存したコード」を優先的に確認してください。

確認対象問題になりやすい例修正方針
V-Order設定以前は有効だった前提で読み取り性能を見積もっているセッション、テーブル、書き込み単位で明示する
旧設定名spark.sql.parquet.vorder.enable を使っているRuntime 1.3以降では削除済みのため置き換える
Optimize Write既定で有効と想定している現環境の設定を確認し、必要なら明示する
スキーマ推論CSV読み込みで型や列名を自動判定している本番テーブルではスキーマを明示する
ショートカットFiles側の外部DeltaをSQLで使えると思っているTables側にショートカットを作る
メンテナンス取り込み後のOPTIMIZEやVACUUMがないバッチ後または定期実行に組み込む

実務では、Notebookの先頭に環境確認セルを置くと、トラブルシュートが楽になります。

print("Runtime V-Order default:", spark.conf.get("spark.sql.parquet.vorder.default", "UNSET"))
print("Optimize Write:", spark.conf.get("spark.databricks.delta.optimizeWrite.enabled", "UNSET"))

設定が環境によって異なることを前提に、処理の目的に応じて明示するのが安全です。

# 読み取り中心の分析テーブル向け
spark.conf.set("spark.sql.parquet.vorder.default", "true")

# 書き込み中心の取り込み処理向け
spark.conf.set("spark.sql.parquet.vorder.default", "false")

移行時のチェックリスト

Azure Synapse Analyticsや既存のFabric環境から移行・再構築する場合は、次の順で確認すると抜け漏れを減らせます。

順番確認内容完了条件
1既存テーブルの形式を確認するDelta、Parquet、CSV、Hiveテーブルの扱いを分類する
2ワークスペース作成時期を確認する2025年4月以前か、それ以降かを把握する
3Runtimeを確認するRuntime 1.3、2.0などの違いを記録する
4V-OrderとOptimize Writeを確認する既定値に依存せず、必要な処理では明示する
5Load to tablesの利用範囲を決めるGUIでよい処理とNotebook化すべき処理を分ける
6ショートカット配置を見直すSQL利用するDeltaテーブルはTables側に置く
7OPTIMIZE/VACUUMの運用を決める実行タイミング、対象テーブル、監視項目を決める
8Power BIやSQL分析エンドポイントで確認するクエリ性能とテーブル認識を検証する

移行でよくある失敗は、「開発環境では速かったのに本番環境で遅い」「旧ワークスペースと新規ワークスペースでファイル数が違う」「SQL分析エンドポイントに外部Deltaテーブルが出てこない」といったものです。多くは、テーブル形式、ショートカットの配置、V-OrderやOptimize Writeの既定値、メンテナンス不足が原因になります。

次に取るべき行動

Microsoft FabricのLakehouse and Delta Tablesに関する今回の更新では、Fabric LakehouseでDelta Lakeテーブルを標準として扱う方針が改めて整理され、V-OrderやOptimize Writeの既定値について実務上重要な注意点が明確になりました。

まず管理者は、ワークスペース作成時期、Fabric Spark Runtime、Environment、Spark設定を確認してください。開発者は、NotebookやパイプラインがV-Order、Optimize Write、スキーマ推論、ショートカット配置に暗黙依存していないかを見直します。そのうえで、読み取り中心の分析テーブルにはV-OrderやOPTIMIZE、頻繁な小規模書き込みにはAuto compaction、ストレージ回収にはVACUUMを組み合わせるのが現実的です。

Deltaテーブル運用で重要なのは、機能をすべて有効にすることではありません。読み取り性能、書き込み速度、保守コスト、Power BIでの利用形態を見て、テーブルごとに最適化方針を決めることです。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次