Delta Lakeとは|Icebergとの違いとレイクハウス実装
最終更新日:2026/11/12
Delta Lakeとは、Parquetファイルにトランザクションログを重ね、データレイク上でACID更新とタイムトラベルを実現する保存層です。Icebergとどちらを選ぶべきか迷うデータ基盤エンジニアに向けて、仕組み・最新仕様の現在地・実装時の落とし穴・案件での評価まで整理します。
先に結論
Delta Lakeは新しいファイル形式ではありません。実体はParquetで、その上にトランザクションログ(_delta_logディレクトリ)を置いた保存層です
Icebergとの最大の差はメタデータの持ち方です。Deltaは連番のコミットログ、Icebergはスナップショットとマニフェストの階層構造で管理します
選定の目安は単純です。SparkとDatabricks中心ならDelta、複数エンジンから同じテーブルを読むならIcebergが扱いやすくなります
両方を読ませたい場合はUniFormという選択肢があります。ただしIceberg側からは読み取り専用で、Deletion Vectorsとは併用できません
実装で最も事故が多いのはS3です。S3には相互排他の仕組みがないため、既定構成では単一ドライバからの書き込みしか安全ではありません
この記事でわかること
Delta Lakeの内部構造(ログ、チェックポイント、ACIDの実現方法)
Delta LakeとApache Icebergの構造的な違いと、2026年11月時点での仕様の現在地
レイクハウスを実装するときの具体的な判断ポイントと、S3まわりの制約
フリーランスのデータ基盤案件でDelta Lakeのスキルがどう見られるか
対象読者は、ETLやDWHの実務経験があり、これからレイクハウス構成の設計・移行に関わるエンジニアです。SQLとParquetの基礎知識があれば読み進められます。
目次
Delta Lakeとは|Parquetにログを重ねた保存層
Delta Lakeの主要機能
執筆時点のバージョンの現在地
Delta LakeとApache Icebergの違い
UniForm|Deltaで書いてIcebergとして読む
レイクハウス実装の勘所
どちらを選ぶか|ケース別の判断
フリーランス案件でDelta Lakeはどう見られるか
よくある失敗と対策
実践チェックリスト
まとめ
よくある質問
Delta Lakeとは|Parquetにログを重ねた保存層
Delta Lakeは、Parquetで保存されたデータに対して、トランザクションログによる一貫性を与えるオープンソースの保存層です。 Databricks発のプロジェクトで、現在はLinux Foundation傘下で開発されています。
よくある誤解から先に潰しておきます。Delta LakeはParquetを置き換えるものではありません。データ本体は普通のParquetファイルのままです。変わるのは「どのファイルが、いつの時点のテーブルを構成しているか」を記録する仕組みのほうです。
トランザクションログの中身
テーブルのディレクトリを開くと、データのParquetファイルと並んで_delta_logというディレクトリがあります。この中に、000000000000000000.json のような連番のJSONファイルが積み上がっていきます。
1つのJSONが1回のコミットに対応します。中身は「このファイルを追加した」「このファイルを削除した」という操作の記録です。読み取り側は、ログを順に適用して現在のテーブル状態を組み立てます。
ログが増えると再生コストが上がるため、一定間隔でチェックポイント(Parquet形式のスナップショット)が作られます。読み取りは直近のチェックポイントから再開できる仕組みです。
ACIDをどう実現しているか
Delta Lakeは楽観的並行制御を使います。書き込み側はまず現在のバージョンを読み、処理を行い、最後に「次の連番のログファイルを作れたら成功」という形でコミットします。
同じ連番を複数の書き込みが取り合った場合、先に作れたほうが勝ち、負けたほうはリトライします。つまりACIDの土台は「同じ名前のファイルを1つしか作らせない」というストレージ側の保証にあります。この前提が崩れるのがS3で、後述する実装上の最大の注意点になります。
ミニFAQ:Parquetのデータレイクから移行できますか
既存のParquetテーブルは CONVERT TO DELTA で変換できます。データファイルを書き直さずログを生成する方式のため、巨大なテーブルでも比較的短時間で済みます。ただし変換後はDelta対応エンジンからの読み取りが前提になるため、既存ジョブの対応状況を先に洗い出してください。
Delta Lakeの主要機能
使われる理由は、データレイクに「やり直し」と「部分更新」を持ち込める点に集約されます。
機能 | 何ができるか | 実務での使いどころ |
|---|---|---|
ACIDトランザクション | 中途半端な状態を読ませない | 日次バッチの途中失敗時にテーブルが壊れない |
タイムトラベル | 過去バージョンの参照・復元 | 集計ミスの原因調査、誤更新のロールバック |
スキーマ強制・進化 | 想定外の列や型を弾く/安全に追加する | 上流のスキーマ変更による静かなデータ破損を防ぐ |
MERGE(UPSERT) | 条件つきの更新・削除・挿入 | CDC取り込み、削除要求への対応 |
Deletion Vectors | 行削除をファイル書き直しなしで表現 | 大きなテーブルでの少量削除 |
タイムトラベルとVACUUMの関係
ここは運用で必ず引っかかる箇所です。タイムトラベルで遡れる期間は、ログの保持期間と、削除済みファイルの保持期間の両方に縛られます。
公式ドキュメントによると、ログ保持(delta.logRetentionDuration)の既定は30日、削除済みファイル保持(delta.deletedFileRetentionDuration)の既定は7日です。VACUUMはこの後者を基準に物理ファイルを消します。
つまり既定のままVACUUMを回すと、7日より前のバージョンは実体が消えて復元できなくなります。「30日戻れるはず」と思い込んだまま保持設定を触ると、監査要件を満たせないことがあります。詳細はDelta Lake公式ドキュメント(テーブルバッチ読み書き)で確認してください。
小ファイルへの対処
ストリーミング取り込みや頻繁なMERGEは、小さなParquetを大量に生みます。対策はOPTIMIZEによるコンパクションです。
従来はZ-Orderでデータの並びを整えるのが定番でしたが、現在はLiquid Clustering(CLUSTER BY)という選択肢があります。公式ドキュメントでは、Delta Lake 3.1.0以降で利用可能、3.1ではプレビュー扱いで、3.2以降は正式機能と整理されています。クラスタリング列は統計が収集された列から最大4列まで、という制限も明記されています。
既存データを書き直さずにクラスタリング列を再定義できる点が、固定パーティションとの大きな違いです。
執筆時点のバージョンの現在地
技術選定の資料に使うなら、バージョンの前提を揃えてから比較してください。 以下は2026年11月時点でDelta Lakeのリリース一覧から確認できる状況です。
版 | 公開時期 | 押さえておきたい点 |
|---|---|---|
Delta Lake 4.0.0 | 2025年6月 | Apache Spark 4.0ベース。Variant型、Delta Connectを追加。catalog-managed tablesはプレビュー |
Delta Lake 3.3.3 | 2026年8月 | 3.x系の保守リリース。Spark 3.5系を使い続ける現場向け |
Delta Lake 4.4.1 | 2026年10月 | 4.x系の最新。4.4.0でSpark 4.2対応とIDENTITY列のSQL DDL対応が入った |
4.0では、Delta Standaloneとそれに依存するDelta Flink・Delta Hiveコネクタが4.x系のリリース対象から外れました。公式リリースノートでは、これらは保守モードで3.x系の重大な修正のみ、Delta Kernelへ移行していく方針が示されています。レガシーなFlink連携を含む構成の移行案件では、ここが見積りの分岐点になります。
なおバージョン名を出す以上は時間で陳腐化します。採用前に公式リリースノートで最新安定版とプレビュー区分を必ず確認してください。
Delta LakeとApache Icebergの違い
この章が本記事の中心です。Iceberg自体の仕様の詳細(メタデータ階層やカタログ層の論点)はApache Icebergとは|テーブルフォーマットの仕組みと案件要件で扱っているため、ここではDelta側から見た差分に絞ります。
構造の違い:連番ログか、スナップショット階層か
Deltaは連番のコミットログを前から順に適用します。Icebergはスナップショット、マニフェストリスト、マニフェストという階層をたどってファイル集合を特定します。
結果として得意・不得意が変わります。Deltaは「直近の状態を素早く組み立てる」方向、Icebergは「巨大なテーブルでファイルの枝刈りを効かせる」方向に設計の重心があります。
仕様の進め方が根本的に違う
Icebergは仕様バージョンで進みます。Apache Iceberg公式のテーブル仕様では、v1・v2・v3が策定済みでコミュニティに採択済み、v4は現在策定中で正式採択されていないと明記されています。v3ではvariantやgeometryなどの型、行の系統追跡(Row Lineage)、バイナリのDeletion Vectorsが追加されました。
一方のDeltaは、テーブル機能(table features)という単位で機能を有効化します。バージョン番号を上げるのではなく、必要な機能だけをテーブルに付ける考え方です。
この違いは実務に響きます。Icebergは「このテーブルはv3だから、読み手もv3対応が必要」という判断になりますが、Deltaは「このテーブルはDeletion Vectorsを使っているか」という機能単位の確認になります。
比較表(判断に使う粒度で整理)
観点 | Delta Lake | Apache Iceberg |
|---|---|---|
出自 | Databricks発、Linux Foundation | Netflix発、Apache Software Foundation |
メタデータ | 連番コミットログ+チェックポイント | スナップショット/マニフェストの階層 |
仕様の進め方 | テーブル機能単位で有効化 | 仕様バージョン(v3まで採択、v4は策定中) |
半構造データ | Variant型(4.0で追加) | variant型(v3で追加) |
エンジンの広がり | Spark中心に強い。他エンジンはコネクタ経由 | 複数エンジンからの利用を前提に設計 |
カタログ連携 | catalog-managed tablesは4.0でプレビュー | カタログ実装を選べる設計 |
相互運用 | UniFormでIceberg形式として読ませられる | v3以降で機能面がDeltaに接近 |
両者の機能差は年々縮んでいます。今の選定は「機能の優劣」ではなく「どのエンジンとカタログを中心に据えるか」で決まると考えたほうが実態に近くなります。
ミニFAQ:性能はどちらが速いですか
日本語で見かけるベンチマーク記事の多くは、Delta 1.x世代とIceberg 0.x世代を比べた古いものです。双方ともDeletion Vectorsや統計の持ち方が変わっているため、過去の数値をそのまま現在の判断材料にはできません。自社のクエリパターンで測り直すのが前提になります。
UniForm|Deltaで書いてIcebergとして読む
UniFormは、Deltaテーブルを書きながら、Iceberg(またはHudi)のメタデータも同時に生成する機能です。 Iceberg対応ツールから同じデータを読めるようになります。
制限はバージョンで変わりやすい領域です。以下は現時点の公式ドキュメントに記載されている要件と制限で、導入前に最新版で再確認してください。
有効化にはcolumn mapping(物理的な列名とテーブル上の列名を切り離す機能)が必要で、テーブルプロトコルはminReaderVersion 2以上・minWriterVersion 7以上
Iceberg向けの書き込みはDelta Lake 3.1以上、Hudi向けは3.2以上
Iceberg・Hudiクライアントからは読み取りのみ。外部ライターが書き込むとデータ破損の危険がある
Deletion Vectorsを有効にしたテーブルでは使えない
Change Data FeedとDelta SharingはIceberg側では未対応
ここを読み違えると設計が壊れます。UniFormは「双方向の相互運用」ではなく「Deltaを正としたIceberg読み取りの提供」です。Iceberg側から更新したい要件があるなら、UniFormでは解けません。
レイクハウス実装の勘所
メダリオンアーキテクチャの組み方
ブロンズ(生データ)、シルバー(整形・名寄せ済み)、ゴールド(集計・用途別)の3層に分けるのが定番です。層ごとに役割を固定すると、再処理の範囲を限定できます。
層の設計やオーケストレーションの考え方は、Apache Airflowとは|DAGの仕組み・dbt/Dagsterとの違い・案件単価やdbtとは|データ変換(ELT)の仕組み・使い方・案件単価で扱っている内容と組み合わせると具体化しやすくなります。
S3で複数クラスタから書くときの制約
ここが実装で最も事故が起きる箇所です。 現時点のDelta Lake公式のストレージ設定ドキュメントには、S3は相互排他(mutual exclusion)を提供しないため、1つのライターだけがファイルを作成できることを保証する手段がない、と書かれています。
そのため既定のLogStore実装(S3SingleDriverLogStore)では、保証されるのは単一のSparkドライバ内での同時書き込みだけです。複数クラスタから同じテーブルに書くと、データ損失の危険があると明記されています。なおマネージドサービス側で独自のコミット調停を持つ環境もあるため、最終的には利用するランタイムのドキュメントもあわせて確認してください。
複数クラスタ書き込みを行う場合は、DynamoDBを使うS3DynamoDBLogStoreを設定します。専用JARとDynamoDBテーブルの用意が必要で、すべてのライターが同じLogStore実装・同じDynamoDBテーブル・同じリージョンを使っていなければ安全ではありません。「一部のバッチだけ別クラスタから書いている」といった構成が混ざっていると、前提が崩れます。
移行案件に入る初週は、どのジョブがどこからテーブルに書いているかを洗い出すところから始めると、この種の地雷を早く見つけられます。
運用の既定値まとめ
項目 | 既定 | 変更時の注意 |
|---|---|---|
ログ保持 | 30日 | 伸ばすとチェックポイント以降のログが増える |
削除済みファイル保持 | 7日 | 短縮するとタイムトラベルの実効期間が縮む |
VACUUM | 上記の削除済みファイル保持を基準に削除 | 実行前に復元要件を確認する |
クラスタリング列 | 最大4列 | 統計が収集された列のみ指定可能 |
どちらを選ぶか|ケース別の判断
判断軸は「中心に据えるエンジンとカタログ」の1点です。 以下は選定の目安で、要件次第で逆転します。
状況 | 向いている選択 | 理由 |
|---|---|---|
Databricks中心で、SparkとMLが主役 | Delta Lake | 既定フォーマットで、運用機能の対応が早い |
Trino・Flink・DWHなど複数エンジンから同じテーブルを読む | Iceberg | エンジン非依存を前提に仕様が進んでいる |
既存のParquetデータレイクを段階的に改善したい | Delta Lake | CONVERT TO DELTAで書き直しを抑えて移行できる |
Deltaで書きつつIceberg対応ツールにも読ませたい | UniForm併用 | ただし読み取り専用、Deletion Vectors併用不可 |
これから学ぶ立場で迷っている | 片方を深く、もう片方は構造だけ | 概念は共通で、2本目の習得コストは大きく下がる |
学習順でいえば、先にDelta Lakeで「ログとスナップショットで一貫性を作る」考え方を手で触って掴み、その後にIcebergのマニフェスト階層を読むと理解が早くなります。概念が共通しているので、2つ目は数日単位で輪郭を掴めます。
Databricksとは|レイクハウスの仕組み・Snowflakeとの違い・案件単価は製品としての全体像、Apache Sparkとは|分散処理の仕組み・Hadoopとの違い・案件単価は実行エンジン側の基礎にあたります。あわせて読むと、どこまでがDelta Lakeの責務かが整理できます。
フリーランス案件でDelta Lakeはどう見られるか
単独スキルとして募集されることはほとんどありません。 フリーランス向けエージェントの公開案件(データ基盤・データエンジニア系の募集)を見る限りでは、Databricks構築・運用やSparkによるデータ基盤開発の要件の中に、Delta Lakeの設計経験が並ぶ形が中心です。以下は公開されている募集要件を読んだ範囲での整理で、非公開案件や社内直請けの傾向までは含みません。
評価されやすいのは、機能を知っていることよりも、次のような判断ができることです。
メダリオン層の切り方と再処理範囲を説明できる
OPTIMIZEやVACUUMの実行計画を、復元要件とコストの両面から決められる
DeltaとIcebergのどちらを採るかを、エンジン構成を根拠に説明できる
既存Parquet資産からの移行手順とリスクを事前に洗い出せる
単価の水準はレイヤー(取り込み・変換・BI)と商流で大きく変わります。レイヤー別の目安はデータ基盤案件の単価相場|ETL・DWH・BIレイヤー別の目安とスキル、職種としての全体像はデータエンジニアとは?仕事内容・年収・将来性をわかりやすく解説で整理しています。いずれも公開案件ベースの目安であり、個別の提示額は経験・稼働・商流で動きます。
自分の経験でどの程度の単価を狙えるかを確かめたい場合は、無料のフリーランスエンジニア単価診断でおおよその市場水準を確認できます。単価を体系的に上げる考え方は【2026年最新版】フリーランスエンジニアの単価相場と単価の上げ方とは?、複数案件から選ぶときの優先順位のつけ方は案件の選び方|フリーランスエンジニアが単価・稼働・スキルで決める優先順位にまとめています。
Spark関連の募集状況はSparkの案件一覧から確認できます。
よくある失敗と対策
VACUUM実行でロールバックできなくなる
「30日戻れる」と思い込んだまま既定設定でVACUUMを回し、7日より前の復元ができなくなるパターンです。復元要件を先に決め、削除済みファイル保持をそこから逆算してください。
複数クラスタからS3に書いてログが壊れる
検証環境では再現せず、本番で散発的に壊れるため原因特定が遅れます。書き込み主体を棚卸しし、必要ならS3DynamoDBLogStoreへ統一します。中途半端に一部だけ導入するのが最も危険です。
UniFormを双方向と誤解した設計
Iceberg側から更新する前提で設計すると、実装段階で破綻します。要件定義の時点で「書き込みの正はDelta」と合意しておくことが必要です。
バージョン前提のずれ
Delta Spark 4.x系はSpark 4系が前提で、Scala 2.13向けの成果物が公開されています。Spark 3.5系を使い続ける現場では3.x系の保守リリースを追うことになります。PoCと本番で版を揃えておかないと、移行時に手戻りが出ます。
実践チェックリスト
着手前に以下を確認しておくと、設計のやり直しを減らせます。
テーブルを読み書きするエンジンを全て列挙したか(Spark以外の読み手の有無)
ストレージはS3か。複数クラスタから書く計画はあるか
復元要件は何日分か。VACUUMと保持設定はそれに整合しているか
Deletion Vectorsを使うか。使うならUniFormは選択肢から外れる
採用するDelta版と、対応するSpark版・Scala版を揃えたか
Flink連携が必要か。必要なら現在のコネクタの保守状況を確認したか
クラスタリング列の候補は統計収集対象になっているか(最大4列)
まとめ
Delta LakeはParquetにトランザクションログを重ねた保存層で、Icebergとの違いはメタデータの持ち方と仕様の進め方にあります。選定はエンジンとカタログの構成で決まります。
実体はParquet。ログとチェックポイントで一貫性を作る
タイムトラベルの実効期間は削除済みファイル保持(既定7日)に縛られる
Icebergは仕様バージョンで進み、v3まで採択済み、v4は策定中
UniFormはDeltaを正としたIceberg読み取りの提供で、双方向ではない
S3の既定構成は単一ドライバ前提。複数クラスタ書き込みは専用のLogStoreが必要
案件では単独スキルではなく、Databricks・Spark案件の中の設計判断として評価される
次のステップとしては、手元のクエリパターンでOPTIMIZEとクラスタリングの効き方を測ること、そして既存テーブルの書き込み主体を棚卸しすることをおすすめします。
参照した一次情報は次のとおりです。
よくある質問
Delta LakeはDatabricksを契約しないと使えませんか
使えます。Delta LakeはOSSで、Apache Sparkに依存ライブラリを追加すれば単体で動きます。ただしDatabricks側にしかない最適化機能もあるため、検証時は「OSS版で実現できる範囲か」を切り分けて確認してください。
ParquetからDeltaに変換すると、元のツールから読めなくなりますか
CONVERT TO DELTAは既存のParquetファイルを書き直さず、ログを追加する方式です。ファイル自体は残りますが、テーブルとしての整合性はログが持つため、Deltaを理解しないツールが直接ディレクトリを読むと、削除済みのファイルまで拾う可能性があります。読み手側の対応を先に確認してください。
UniFormを有効にすると、Icebergクライアントから書き込めますか
できません。公式ドキュメントでは読み取り専用と明記されており、外部ライターが書き込むとデータ損失の危険があると警告されています。
タイムトラベルは何日前まで戻れますか
既定ではログ保持が30日ですが、削除済みファイルの保持が7日のため、VACUUMを実行していると実質7日が上限になります。長期の復元が必要なら、保持設定をストレージコストと合わせて設計してください。
S3で複数ジョブから同時に書き込んでも壊れませんか
既定構成では保証されません。S3に相互排他の仕組みがないためです。複数クラスタから書くならS3DynamoDBLogStoreを全ライターで統一する必要があります。
Liquid ClusteringはOSS版でも使えますか
Delta Lake 3.1.0以降で利用できます。3.1ではプレビュー扱いで一部操作が制限され、3.2以降で正式機能になりました。クラスタリング列は統計が収集された列から最大4列までです。
Spark以外のエンジンからDeltaテーブルを読めますか
読めます。たとえばTrinoにはDelta Lakeコネクタが用意されています。ただし対応状況は機能単位で差があり、Deletion Vectorsや新しいテーブル機能を使っていると読めないことがあります。採用前に機能単位で確認してください。
Delta LakeとIcebergはいずれ統合されますか
相互運用を強める方向に進んでいますが、統合の時期や形が公式に確約されているわけではありません。現時点では「どちらかに寄せつつ、もう一方からも読めるようにする」構成を前提に設計するのが無難です。
Variant型はJSON文字列のカラムと何が違いますか
JSONを文字列として持つ場合、読み取りのたびに解析が必要です。Variantは半構造データを型として扱うため、構造が行ごとに揺れるデータを保持しつつクエリ性能を確保しやすくなります。DeltaではVariantが4.0で、Icebergではv3で追加されています。
Hudiとの違いはどこですか
Apache Hudiは、更新やCDC取り込みを前提とした設計が出発点です。3者はいずれも更新可能なテーブルを扱えますが、Hudiは取り込みパイプラインとの一体感、Icebergはエンジン非依存、DeltaはSparkとの親和性にそれぞれ重心があります。
Delta 4.0に上げるとSparkも4系が必要ですか
OSS版を使う場合は原則そうなります。公式リリースノートによると、Delta Spark 4.0はApache Spark 4.0の上に構築されており、4.4.0ではSpark 4.2・4.1・4.0.1向けの成果物が公開されています。Spark 3.5系を継続するなら3.x系の保守リリースを使う形です。マネージドのランタイムを使っている場合は、組み込まれているDelta版がベンダー側で決まるため、提供元の対応表を確認してください。
Delta Flinkコネクタは今後も使えますか
Delta StandaloneとDelta Flink・Delta Hiveコネクタは、4.0以降4.x系のリリース対象から外れ、保守モードに移行しました。3.x系で重大な修正のみを受ける形です。Flink連携を含む構成では、Delta Kernelベースの移行計画を前提に検討してください。
