---
title: Azure Databricks への移行時の注意点
tags: 
author: [Satoshi ENOMOTO](https://image.docswell.com/user/satoshi_enomoto)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/5EGLKLQRJL.jpg?width=480
description: Microsoft Data Analytics Day(Online) 勉強会 2026/05_発表資料 ユーザーグループ: https://sqlserver.connpass.com/ Qiita: https://qiita.com/satoshi_enomoto
published: May 28, 26
canonical: https://image.docswell.com/s/satoshi_enomoto/KY8M7N-2026-05-28-181306
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/5EGLKLQRJL.jpg)

Microsoft Data Analytics Day (Online) 勉強会
Azure Databricks への移行時の注意点
発表者：Satoshi Enomoto
2026/05/28


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4JQYNYKY7P.jpg)

はじめに
•
現在、実施中の Azure Databricks への移行（処理・データ）方法について
✓ 移行時の工夫点や注意すべきこと
Azure Databricks
移行元システム
移行
ETL
データ
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/K74WGWPZE1.jpg)

処理の移行
•
複数 DML の ACID を保証するためにマルチテーブルトランザクション機能を利用
✓ 複数のステートメントまたは複数のテーブルにまたがるトランザクションがすべて成功時にコミット、エラー時にロールバック可能
移行元の SQL タスクの例
Databricks では以下のように記述することで
自動コミット・ロールバック
CREATE TASK TASK_TXN_TARGET_01
WAREHOUSE = COMPUTE_WH
AS BEGIN
INSERT INTO txn_target_01 VALUES
(1, CURRENT_TIMESTAMP()),
(2, CURRENT_TIMESTAMP()),
(3, CURRENT_TIMESTAMP());
DELETE FROM txn_target_01
WHERE id = 1;
END;
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LJ1YDY9DEG.jpg)

処理の移行
•
注意点：複数 DML を実行するだけでは、コミットが分かれてしまうため、Dirty reads や Phantom reads の原
因となる
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GJWGYGQ872.jpg)

処理の移行
•
注意点：TRUNCATE や DDL はサポート外
トランザクション - Azure Databricks | Microsoft Learn
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4EZLXLW973.jpg)

処理の移行
•
ジョブの一部をサーバーレス SQL ウェアハウスで実行
✓ 処理を SQL で書いておくと SQL ウェアハウスで実行が可能
✓ サーバーレス ジョブ コンピューティングだと実行時間の要件を満たせなかったため、サーバーレス SQL ウェアハウスで
サイズを固定して実行（サーバーレス ジョブ コンピューティングは自動最適化される）
発表時のみ投影
赤枠のタスクを
SQL ウェアハウスで実行
その他のタスクは
サーバーレス ジョブ コンピューティング
で実行
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/Y76W4WGD7V.jpg)

データの移行
•
CLONE を利用することで、 Parquet および Apache Iceberg データの Delta Lake への移行を簡略化
移行元システム
Databricks
外部ストレージ（ADLS）
Unity Catalog
CLONE
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/G75MQMV874.jpg)

データの移行
•
CLONE とは？
✓ 元テーブルの構造やテーブルプロパティをそのままコピー可能
✓ クローンテーブルの変更は元テーブルには影響せず、元テーブルと独立した履歴を持つ
✓ 既存クローンテーブルがある場合、増分でコピーすることが可能
✓ データを読み取って新しく書き出す CTAS (CREATE TABLE ~ AS SELECT ~) より時間・コストがかからない
✓ SHALLOW CLONE と DEEP CLONE の2種類
SHALLOW CLONE
元テーブル
DEEP CLONE
クローンテーブル
元テーブル
コピー
メタデータ
データファイル
クローンテーブル
コピー
メタデータ
データファイルは
元テーブルと共有
メタデータ
メタデータ
データファイル
データファイル
注意：元テーブルで VACUUM (保持期間より過去のデータファイルを削除)
すると影響を受ける可能性がある
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/9J29P93VER.jpg)

データの移行
•
Parquet / Iceberg から Delta に移行するために CLONE を利用することができる
✓ ソースとなる Parquet / Iceberg をそのままに、Delta に移行することが可能
移行元システム
Databricks
外部ストレージ（ADLS）
Unity Catalog
コピー&amp;変換
CREATE OR REPLACE TABLE &lt;クローンテーブル&gt;
DEEP CLONE
iceberg.`abfss://&lt;container&gt;@&lt;storage_account&gt;.d
fs.core.windows.net/~/metadata/00001xxx.metadata.json`;
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/DEY4541QJM.jpg)

データの移行
•
注意点：Unity Catalog では DEEP CLONE となるためコストが大きくなる可能性がある
✓ Unity Catalog では Parquet / Iceberg からの SHALLOW CLONE がサポートされておらず、DEEP CLONE のみとなるため、
ストレージコストが膨らむ（ Parquet テーブルと Apache Iceberg テーブルを Delta Lake に増分複製する - Azure
Databricks | Microsoft Learn ）
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/VJNYNY2278.jpg)

データの移行
•
注意点：Iceberg の CLONE 時に最新の metadata ファイルを指定する必要がある
✓ Iceberg テーブルへの操作のたびに metadata ファイルのバージョンが上がるため、定期実行するには指定ファイル名の修正が必要
CREATE OR REPLACE TABLE &lt;クローンテーブル&gt;
DEEP CLONE
iceberg.`abfss://&lt;container&gt;@&lt;storage_
account&gt;.dfs.core.windows.net/~/metad
ata/00001-xxx.metadata.json`;
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/YE9PRP1DJ3.jpg)

データの移行
•
移行元が Snowflake テーブルの場合、以下の構成で移行が可能となる
✓ Snowflake テーブルから CTAS (CREATE ICEBERG TABLE ~ AS SELECT *) で Snowflake 管理 Iceberg テーブルを
作成
✓ クローン先 Delta テーブルから移行先 Delta テーブルへ INSERT OVERWRITE（必要に応じて監査列付与）
✓ Snowflake と Databricks のネットワークが直接つながっていなくても、ストレージを介して移行が可能
Snowflake
移行
Databricks
移行元 Snowflake テーブル
移行先 Delta テーブル
Snowflake 管理 Iceberg テーブル
クローン先 Delta テーブル
外部ストレージ（ADLS）
CLONE
(コピー&amp;変換)
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/GE8DWD45ED.jpg)

データの移行
•
注意点：データ型に差異が出る場合があるので適切に CAST を実施する
✓ Snowflake テーブルの timestamp 型のデフォルト桁数は9桁（ナノ秒）だが、Databricks Delta テーブル timestamp 型は
6桁（マイクロ秒）までのため CAST して桁数を落とすことが必要（桁数を落とせない場合は文字列にする）
日付と時刻のデータ型 | Snowflake Documentation
TIMESTAMP 型 - Azure Databricks - Databricks SQL | Microsoft Learn
ここで
CAST(col01 AS TIMESTAMP(6))
が必要
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/LELMNM637R.jpg)

データの移行
•
注意点：INSERT OVREWRITE 時にサーバーレス コンピューティングがメモリ不足のエラーが発生したため、
クラシック コンピューティングを利用
✓ テーブルサイズが数TBかつ変換処理を入れていたため、サーバーレス コンピューティングがメモリ不足のエラーが発生
✓ クラシック コンピューティング を利用する際は、サブスクリプションのクォータ上限を考慮して、VM のコア数・バージョンを設計する
ワーカー当たりのコア数×ワーカー数+ドライバーのコア数が
上限に達してしまうとワーカーが確保できなくなるため、
想定する移行時間より遅くなる
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4JMYXY5MJW.jpg)

データの移行
•
Delta Lake 形式の Iceberg テーブルを利用することでデータの現新比較を実施
✓ 外部ストレージに Databricks の移行先の Delta テーブルを作成しておく
✓ Snowflake にて Delta Lake 形式のディレクトリから Iceberg テーブルを作成する
✓ Snowflake にて Delta 形式の Iceberg テーブルと移行元 Snowflake テーブルを EXCEPT 等の SQL で比較可能となる
Databricks
Snowflake
移行元 Snowflake テーブル
移行先 Delta テーブル
比較
Delta 形式の Iceberg テーブル
外部ストレージ（ADLS）
ストレージ上の Delta トランザクション
ログとParquetファイルを Snowflake の
Iceberg テーブルとして読むことが可能
Apache Iceberg
Documentation
テーブル | Snowflake
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/PJR9N93L79.jpg)

まとめ
•
処理の移行時のポイント
✓ 複数 DML の ACID を保証するには、マルチテーブルトランザクション機能を利用する
✓ 実行時間の要件を満たすため、ジョブの一部を SQL ウェアハウスで実行する
※ 一から移行を実施する際は、移行支援ツールである Lakebridge が有効
•
データの移行時のポイント
✓ Snowflake テーブルから Snowflake 管理 Iceberg テーブルを作成することで DEEP CLONE で Unity Catalog の Delta
テーブルに移行することができる
✓ Snowflake にて Delta 形式の Iceberg テーブルを利用することで、 Delta テーブルのデータと Snowflake テーブルのデータの
比較が容易になる
Azure Databricks
移行元システム
移行
ETL
データ
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/PEXQNQ96JX.jpg)

ご清聴ありがとうございました！


