434 Views
May 28, 26
スライド概要
Microsoft Data Analytics Day(Online) 勉強会 2026/05_発表資料
ユーザーグループ: https://sqlserver.connpass.com/
Qiita: https://qiita.com/satoshi_enomoto
株式会社ジール所属
Microsoft Data Analytics Day (Online) 勉強会 Azure Databricks への移行時の注意点 発表者:Satoshi Enomoto 2026/05/28
はじめに • 現在、実施中の Azure Databricks への移行(処理・データ)方法について ✓ 移行時の工夫点や注意すべきこと Azure Databricks 移行元システム 移行 ETL データ 2
処理の移行 • 複数 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
処理の移行 • 注意点:複数 DML を実行するだけでは、コミットが分かれてしまうため、Dirty reads や Phantom reads の原 因となる 4
処理の移行 • 注意点:TRUNCATE や DDL はサポート外 トランザクション - Azure Databricks | Microsoft Learn 5
処理の移行 • ジョブの一部をサーバーレス SQL ウェアハウスで実行 ✓ 処理を SQL で書いておくと SQL ウェアハウスで実行が可能 ✓ サーバーレス ジョブ コンピューティングだと実行時間の要件を満たせなかったため、サーバーレス SQL ウェアハウスで サイズを固定して実行(サーバーレス ジョブ コンピューティングは自動最適化される) 発表時のみ投影 赤枠のタスクを SQL ウェアハウスで実行 その他のタスクは サーバーレス ジョブ コンピューティング で実行 6
データの移行 • CLONE を利用することで、 Parquet および Apache Iceberg データの Delta Lake への移行を簡略化 移行元システム Databricks 外部ストレージ(ADLS) Unity Catalog CLONE 7
データの移行 • CLONE とは? ✓ 元テーブルの構造やテーブルプロパティをそのままコピー可能 ✓ クローンテーブルの変更は元テーブルには影響せず、元テーブルと独立した履歴を持つ ✓ 既存クローンテーブルがある場合、増分でコピーすることが可能 ✓ データを読み取って新しく書き出す CTAS (CREATE TABLE ~ AS SELECT ~) より時間・コストがかからない ✓ SHALLOW CLONE と DEEP CLONE の2種類 SHALLOW CLONE 元テーブル DEEP CLONE クローンテーブル 元テーブル コピー メタデータ データファイル クローンテーブル コピー メタデータ データファイルは 元テーブルと共有 メタデータ メタデータ データファイル データファイル 注意:元テーブルで VACUUM (保持期間より過去のデータファイルを削除) すると影響を受ける可能性がある 8
データの移行 • Parquet / Iceberg から Delta に移行するために CLONE を利用することができる ✓ ソースとなる Parquet / Iceberg をそのままに、Delta に移行することが可能 移行元システム Databricks 外部ストレージ(ADLS) Unity Catalog コピー&変換 CREATE OR REPLACE TABLE <クローンテーブル> DEEP CLONE iceberg.`abfss://<container>@<storage_account>.d fs.core.windows.net/~/metadata/00001xxx.metadata.json`; 9
データの移行 • 注意点:Unity Catalog では DEEP CLONE となるためコストが大きくなる可能性がある ✓ Unity Catalog では Parquet / Iceberg からの SHALLOW CLONE がサポートされておらず、DEEP CLONE のみとなるため、 ストレージコストが膨らむ( Parquet テーブルと Apache Iceberg テーブルを Delta Lake に増分複製する - Azure Databricks | Microsoft Learn ) 10
データの移行 • 注意点:Iceberg の CLONE 時に最新の metadata ファイルを指定する必要がある ✓ Iceberg テーブルへの操作のたびに metadata ファイルのバージョンが上がるため、定期実行するには指定ファイル名の修正が必要 CREATE OR REPLACE TABLE <クローンテーブル> DEEP CLONE iceberg.`abfss://<container>@<storage_ account>.dfs.core.windows.net/~/metad ata/00001-xxx.metadata.json`; 11
データの移行 • 移行元が 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 (コピー&変換) 12
データの移行 • 注意点:データ型に差異が出る場合があるので適切に CAST を実施する ✓ Snowflake テーブルの timestamp 型のデフォルト桁数は9桁(ナノ秒)だが、Databricks Delta テーブル timestamp 型は 6桁(マイクロ秒)までのため CAST して桁数を落とすことが必要(桁数を落とせない場合は文字列にする) 日付と時刻のデータ型 | Snowflake Documentation TIMESTAMP 型 - Azure Databricks - Databricks SQL | Microsoft Learn ここで CAST(col01 AS TIMESTAMP(6)) が必要 13
データの移行 • 注意点:INSERT OVREWRITE 時にサーバーレス コンピューティングがメモリ不足のエラーが発生したため、 クラシック コンピューティングを利用 ✓ テーブルサイズが数TBかつ変換処理を入れていたため、サーバーレス コンピューティングがメモリ不足のエラーが発生 ✓ クラシック コンピューティング を利用する際は、サブスクリプションのクォータ上限を考慮して、VM のコア数・バージョンを設計する ワーカー当たりのコア数×ワーカー数+ドライバーのコア数が 上限に達してしまうとワーカーが確保できなくなるため、 想定する移行時間より遅くなる 14
データの移行 • 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
まとめ • 処理の移行時のポイント ✓ 複数 DML の ACID を保証するには、マルチテーブルトランザクション機能を利用する ✓ 実行時間の要件を満たすため、ジョブの一部を SQL ウェアハウスで実行する ※ 一から移行を実施する際は、移行支援ツールである Lakebridge が有効 • データの移行時のポイント ✓ Snowflake テーブルから Snowflake 管理 Iceberg テーブルを作成することで DEEP CLONE で Unity Catalog の Delta テーブルに移行することができる ✓ Snowflake にて Delta 形式の Iceberg テーブルを利用することで、 Delta テーブルのデータと Snowflake テーブルのデータの 比較が容易になる Azure Databricks 移行元システム 移行 ETL データ 16
ご清聴ありがとうございました!