Upgrade to Pro — share decks privately, control downloads, hide ads and more …

oracle-to-databricks-migration-with-llm-and-dbt

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 oracle-to-databricks-migration-with-llm-and-dbt

JEDAI Meetup! Databricks実践事例特集
https://jedai.connpass.com/event/390596/

Avatar for case-k-git

case-k-git

May 29, 2026

More Decks by case-k-git

Other Decks in Technology

Transcript

  1. AXA PowerPoint presentation LLM × dbtで自動化する Oracle PL/SQL → Databricks

    マイグレーション — LLMコンバージョン × dbt評価による改善サイクル — アクサ生命保険株式会社 シニアデータエンジニア 谷口恵輔 JEDAI Meetup! Databricks実践事例特集 2026年5月
  2. AXA PowerPoint presentation アクサ生命保険株式会社 シニアデータエンジニア 谷口 恵輔 • Ad Tech

    → Fashion EC Tech → AXA • Tech Lead of Oracle → Databricks Migration • JEDAI Order 2026 Padawan
  3. AXA PowerPoint presentation アクサの日本における事業展開 • フランスに本拠を置く保険と資産運用のグローバル企業、50の 国と地域に9,500万人のお客さま、15.4万人の従業員 • 1817年、ノルマンディで創業、1985年社名をアクサに、グロー バルビジネスを展開

    • 1994年日本法人設立、2000年に日本団体生命(1934年設立) と統合、事業基盤を拡大 • 2018年XLグループを買収し、企業向け損害保険分野で世界 #1の企業に S&P 保険財務力格付け AA ※数値は2025年 アクサグループ実績、 格付は2026年3月11日時点のものです アクサグループについて ※換算レート総売上、基本利益:1ユーロ=¥169.10(2025年平均) 総売上 約19兆5,352億円 (約1,155億ユーロ) 基礎利益 (約83億ユーロ) 約1兆4,150億円
  4. AXA PowerPoint presentation 2025年 主要指標 *アクサ生命、アクサ損害保険の2026年3月末の保有契約件数。 従業員数は2025年3月末時点。 保険料収入はアクサ・ホールディングス・ジャパンの 2025年度連結ベース。 日本におけるグループ企業

    アクサ・ ホールディングス・ ジャパン アクサ 生 命 アクサ 損害保険 保有契約件数  687 万件 従業員数    8,542 人 保険料等収入  1 兆 1,784 億円 XLカトリンジャパン アクサ・ライフケア アクサ・ウエルス・マネジメント マルチチャネルの販路・サービス体制 ダイレクト CCI (3,900) FA (1,400) パートナービジネス (3,000) ダイレクト損保 パートナーシップ (提携先数) 専業チャネル (営業社員・FA職員) マルチチャネルバリューアップ (MP739 健康経営アドバイザー 5,300)** **MP:マーケティングパートナー。健 康 経 営アドバイザーは主にCCI、FA チャネルの営業担当者が認定を受けています。 2026年3月時点 アクサの日本における事業展開
  5. AXA PowerPoint presentation Agenda 1. AXA Data Platform概要 2. プロジェクト概要

    3. マイグレーション方法の検討 4. LLM × dbt ワークフローの実践 5. マイグレーションで直面した技術課題 6. 成果 7. 今後の展望・まとめ
  6. AXA PowerPoint presentation AXAオンプレ環境 Oracle DB , ファイルサーバ aws Data

    Science & Analytics Bizユーザー QuickSuite利用者数 利用者数 約 8,500 名 MAU(月間アクティブユーザー) 約 4,000 名 外部SaaS Data Science Step Functions , Lambda, Glue S3 SageMaker Databricks Athena Aurora PostgreSQL QuickSuite Salesforce, Genesys Direct Connect AXA Data Platform AXAでは S3 にデータを集約し、Databricks への移行を推進。BIツールとして QuickSuite を全社利用している。
  7. AXA PowerPoint presentation 現行システム「Dual」は、バッチ処理やVBAアプリ、ダッシュボードなど複数システムから利用されている基幹 Oracle DB。グローバル方針・ライセンス制約により、2026年内のオンプレOracle廃止が必須。 運用ツール (13本) バッチスケジューラ (PL/SQL

    約850本) 一部のファイル連携等 ダッシュボード (Sales MIS / レポート数 150本) レポーティング VBAアプリ ( PL/SQL 180本 / レポート数 60本) SELECT ファイル サーバー ▼ 歴史的経緯で Auroraに一部移行 S3 Aurora PostgreSQL (PL/pgSQL) QuickSuite ダッシュボード システム規模 PL/SQL 約 1,000 本 テーブル 約 4,000 Functions 約 60 本 利用ユーザー数 約 3,500 名 Oracle オンプレDB (約25年運用) ファイル連携 PL/SQL PL/SQL ファイル連携 ファイル連携やリカバリ Dualマイグレーションプロジェクト
  8. AXA PowerPoint presentation Phase1: DB移行(オンプレOracle→Databricks) • オンプレOracle年内廃止 / グローバル要件 •

    バッチ処理 PL/SQL 約850本の移行 • VBAアプリ PL/SQL 約180本の移行 • ダッシュボード約150本のQuickSuite移行 • Aurora PostgreSQLの廃止準備 • その他運用ツールの移行 Phase2: アプリ移行(VBAアプリ→QuickSuite) • セキュリティ課題のあるVBAアプリの運用を廃 止し、QuickSuiteへ移行 • バッチ処理結果を使いデータマートを構築 • VBAアプリ前提に作られているPL/SQLを QuickSuiteとDatabricks向けに書き換える プロジェクトスコープと段階的移行 継続リリースによりコードフリーズができないため、安全性を考慮し段階的に移行。本プロジェクトでは、オンプレOracle廃 止に向けた Phase 1「DB移行」を対象とし、Phase 2でVBAアプリをQuickSuiteへ移行予定。
  9. AXA PowerPoint presentation 「移行工数」「機能要件」「運用」の観点で比較し、 SQL Scripting / Procedure を採用。SQL Scripting

    をProcedureとして パッケージ化し、 Unity Catalog で一元管理できるため、PL/SQLに近い実行制御が可能。 PL/SQLのマイグレーション方法を検討 再設計・モデリング • DMLを使わず、SELECT文でモデ リングし直す • 約1000 PROCEDURE、4000テー ブルの再設計が必要 • 案件でコードフリーズできない状況 を考えると現実的ではない • 検証時の原因調査も難しくなる → スケジュールに間に合わない PySpark • PL/SQLのDMLは移行可能だが、 一部機能要件を満たせない • spark.sql 文字列の構文エラーは 実行時の検知が中心 (検知漏れ) • Notebookジョブの起動実行に時間 がかかる • コンバージョン評価の高速イテレー ションに不向き → コンバージョン評価のイテレーションを 高速に回しづらい SQL Scripting / Procedure 採用 • PL/SQLの機能要件をほぼ満たす • CREATE PROCEDUREで構文エ ラーを事前検知可能 • ジョブ起動不要、SQLウェアハウス を使い即時実行(ローカルからも API実行可能) • SQLで運用管理でき、検証もでき るため移行しやすい → コンバージョン評価・検証サイクルを高 速化できる
  10. AXA PowerPoint presentation Procedure定義 CREATE PROCEDURE proc_mst(x INT, y INT)

    LANGUAGE SQL SQL SECURITY INVOKER AS BEGIN ATOMIC -- マルチステートメント処理 INSERT INTO ...; MERGE INTO ...;  --エラーが発生するとロールバック END; ATOMICオプションによる冪等なバッチ処理 PL/SQL移行で役立つ機能 ATOMICによるトランザクション制御 複数のDMLを1つのトランザクションとして管理。途中 でエラーが発生した場合は、すべての処理をロール バック可能。 冪等なバッチ処理 Oracleバッチと同様に、複数処理の整合性を担保。途 中失敗時もデータの不整合を防ぎ、再実行可能なバッ チ設計を実現。 SQL ScriptingによるATOMIC制御で、複数ステートメントを一つのトランザクションとして実行。
  11. AXA PowerPoint presentation Procedure定義 CREATE PROCEDURE proc_select(x INT, y INT)

    LANGUAGE SQL SQL SECURITY INVOKER AS BEGIN -- セッションテーブルへの書き込み CREATE TEMPORARY TABLE temp_tb...; INSERT INTO temp_tb...; -- 書き込み結果の取得  SELECT * FROM temp_tb; END; セッションテーブルによる同時実行制御 PL/SQL移行で役立つ機能 SELECT結果の返却 DMLを伴う処理でもSELECT結果を返却可能 同時実行制御 セッションテーブルへの書き込みと結果の取得など、 Oracle GTT(GLOBAL TEMPORARY TABLE)/ Cursor相当の処理を実現。VBAアプリの同時実行要 件にも対応 DMLを伴う処理でもSELECT結果を返却でき、Oracle GTT / Cursor 相当の処理が可能。
  12. AXA PowerPoint presentation LLM × ルール処理による変換ツールを内製 なぜ内製したのか 既存ツールでは精度不足 SQL Scriptingは当時新機能で、既存変換ツールでは十

    分な変換精度が得られず、工数削減は難しかった PL/SQL移行には自動化が必須 約1,000本のPL/SQLを対象に、移行期間中もオンプレ Oracleには継続的に変更が発生。コードフリーズが困難なた め、手作業では追従できず、自動化が不可欠。 アプローチ LLM × ルール処理のハイブリッド 定型変換はルール化し、非定型な変換は LLMを活用 検証結果のフィードバックループ 新機能ゆえLLMの知識が不足。検証結果を変換ルール・プロ ンプトへ反映し、継続的に改善 定型変換のルール化で出力安定 日付形式・関数・構文差分などをルール処理で変換し、 LLM出 力のブレを抑制
  13. AXA PowerPoint presentation dbtによるデータ比較評価と実行制御 dbtで正解データ準備からProcedure実行、データ比較までを実施。ローカルPCから検証可能とし、PL/SQL変 換の検証サイクルを高速化。リリース後もdbtでProcedureを実行制御。 データ準備 dbt Python モデルで

    Oracle 正解データと評価 環境を構築 Oracle正解データの準備 Excel・補助データのロード データ前処理(Oracle互換対応) Procedure 実行制御 Procedure の単体・結合テストを、依存関係と実 行粒度に応じて制御 ref → 依存関係を管理 tag → Procedure / Schema / Batch 単位で実行 pre/post hook → SQLモデルでProcedure実行 dbt retry → 失敗した Procedure のみ再実行 データ比較 Oracle 正解データとの差分を検出し、変換結果 の品質を確認 dbt test → データ品質チェック dbt audit helper → 差分検出・品質担保 準備 → 実行 → 検証 3 フェーズのパイプラインで移行検証を一気通貫 1 2 3 threads → 並列実行数の制御
  14. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー
  15. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / 正解データの準備 正解データ (例)catalog_name:axa_oracle_20260529 Oracleのバッチ処理後のテーブルを日次スナップショットとしてDatabricksへロード。日付サフィックス付きカタロ グで管理し、PL/SQL変換結果の評価用正解データとして利用。
  16. AXA PowerPoint presentation 正解データ準備 / dbt Python モデルとは def model(dbt,

    session): dbt.config( materialized='table', tags=['python_model'], ) dbt.ref("dependency_model") try: df = session.read.format('jdbc') .option('url', ...).option(...) .option('driver', 'oracle.jdbc...') .load() except Exception as e: raise e   return df 1 2 3 pipenv run dbt run --target=dev --select tag:python_model Tips タグによる実行制御 dbtのSQLモデルと同様に、 tagによる実行 制御が可能 dbt.refによる依存関係管理 dbt.refを用いてモデル間の依存関係を管 理できる。SQLモデルとも併用可能 データ取り込み OracleのテーブルやPL/SQL実行結果の取り 込み、Excelファイルの取り込みなど SQLで は困難な処理にも Pythonで対応 1 2 3 正解データの準備にdbt Pythonモデルを活用。dbt SQLモデルでは表現しにくい柔軟な処理を、Pythonで記述 でき、DatabricksのNotebook Job としても実行可能。
  17. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / 評価環境構築 評価環境 (例)catalog_name:axa_oracle_20260529_conversion_test DatabricksへロードしたOracleテーブルに対し、Oracle互換対応などの前処理を施し、Procedureのデータ比 較評価環境を構築。
  18. AXA PowerPoint presentation 評価環境構築 / 評価者ごとに独立した環境を dbtで構築 vars: env: "dev"

    date_jst: "20260501" catalog: "axa_oracle_20260501" vars: env: "dev" date_jst: "20260529" catalog: "axa_oracle_20260529" 評価者_A : 20260401 評価者_A : 20260501 評価者_B : 20260529 評価者ごとに検証日を割り当て、独立したカタログで検証。評価者はそれぞれデータ比較する対象日をdbt の 設定ファイル内で指定し、独立した評価環境を構築する。 dbt/config/dev/dbt_project.yaml
  19. AXA PowerPoint presentation 評価環境構築 / 評価環境で使用する 2種類のデータ ソーステーブル 日次連携され、バッチ処理の入力データとなるテーブル 更新テーブル

    バッチ処理によって更新されるテーブル Procedure 実行 データ比較 評価 (Runtime・Data) S3 COPY INTO ローデータ (Bronze) 評価環境では、入力となるソーステーブルと、バッチ処理で更新される更新テーブルを使い分ける。 1 2
  20. AXA PowerPoint presentation バッチ処理実行前の状態 バッチ処理実行後の状態 データ連携・評価の流れ Oracle axa_oracle_20260529 ソーステーブルは 当日から取得

    更新テーブルは 前日から取得 評価環境(実行前) ソーステーブル (検証日) 更新テーブル (検証日の前日) Procedure 実行 評価環境(実行後) 更新後の テーブル 比較 Oracle (検証日) 評価環境構築 / 評価環境で使用する検証日付断面 Oracle axa_oracle_20260528 「ソーステーブル」に検証指定日、「更新テーブル」に前日断面を使い、Oracleバッチ実行前 の状態を再現。 Procedure実行後はOracleバッチ実行後 の状態と一致するため、比較評価できる。
  21. AXA PowerPoint presentation 評価環境構築 / Oracle互換を考慮したテーブル DDL生成 入力① dba_tab_columns Oracleのカラム定義

    (データ型・桁数・デフォルト値) 入力② information_schema .columns JDBCロード後の Databricks上の実テーブル情報 変換・補正ロジック • 型マッピング • CHAR / DATE互換補 正 • デフォルト値補正 出力 Databricks DDL CREATE TABLE ... ( col1 STRING, col2 TIMESTAMP ) Oracle の dba_tab_columns と Databricks の information_schema.columns を使い、Oracle互換を考慮し たDDLを自動生成。データ型・デフォルト値などの差異を吸収し、互換対応を実施
  22. AXA PowerPoint presentation データ型 差分 対応 CHAR • Oracle:固定長(スペース埋めあり) •

    Databricks:スペース埋めなし • CHARはSTRING化せず、CHARのまま扱う • デフォルト値をCHARサイズに合わせて補正 • 全スペース値を除き RTRIMして、比較・集計差異を防止 (Group Byなど集計時に差分がでないよう対応が必要 ) DATE • Oracle:時刻を含む • Databricks:時刻を含まない • TIMESTAMP型として扱う (JDBCドライバ利用時は自動変換) • SYSDATE / SYSTIMESTAMP → CURRENT_TIMESTAMP CHAR対応 1. STRING型にしない CHAR型では一致していた条件が、 STRING型で は一致しなくなる 2. CHARサイズ補正 デフォルト値は桁数分の空白に補正 例:CHAR(8) "" → " " 3. RTRIM前処理 全スペース値を除き、末尾スペースを補正 CASE WHEN `{column_name}` RLIKE '^\s+$' THEN `{column_name}` ELSE rtrim(`{column_name}`) END 評価環境構築 / CHAR・DATE型のOracle互換対応 # CHARは全スペースであれば一致 例: WHERE name = ""
  23. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / ルール処理 LLM処理に渡す前に前処理でコード量を減らし、正規表現などLLMよりも正確に変換できる処理はルール処理 で対応する。LLM処理に渡すコンテキスト量を減らし、全体の精度向上させる。
  24. AXA PowerPoint presentation ルール処理 / 正規表現による変換 Oracle互換対応 Oracle PL/SQL Databricks

    SQL Oracle互換UDF ※UDF上限:5(クラスター設定で変更可) TO_CHAR(value, fmt) TRIM(col)..etc oracle_compatible.TO_CHAR(value, fmt) oracle_compatible.TRIM(col)...etc 日付フォーマット yyyy/mm/dd YYYYMMDD YYYY/mm/dd yyyy/MM/dd 日本語はバッククオートで囲む (PL/SQL内の変数やカラム名 ) アクサ太郎 `アクサ太郎`
  25. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / LLM処理 ルールベースで扱いづらい処理はLLM処理で変換。当時はClaude 3.7 Sonnetを活用したが、SQL Scripting や Procedureの知識はないため、公式ドキュメントと実検証を通じて継続的にプロンプトを改善。
  26. AXA PowerPoint presentation while finish_reason == "length" and continuation_count <

    max_continuations: messages.append({ "role": "user", "content": "Please continue from where you left off..." }) continuation, finish_reason = llm_stream_request(messages) full_text += continuation messages.append({"role": "assistant", "content": continuation}) Tips 会話履歴の活用 前回の続きから変換。出力トー クン制限を回避し、コンテキスト ウィンドウまで拡張 Stream処理 タイムアウト回避のため、 Streamで処理 注意点 出力トークンは余裕を持って設定 コンテキストウィンドウが逼迫する と精度が落ちる -- 会話履歴を活用した Continuation -- タイムアウト回避のため Streamで続きの応答を取得(会話履歴を含む) LLM処理 / 会話履歴を活用した数千行以上の PL/SQL変換 1 2 会話履歴を活用することで、モデルの出力トークン制限を回避し、数千行以上のPL/SQLを変換。
  27. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / Syntax評価 コンバージョン結果を Syntax レベルで評価。Syntaxエラー時は、エラーメッセージをコンテキストに加えて数回 リトライし、LLMの不安定さを抑制。
  28. AXA PowerPoint presentation SQL Scripting / ProcedureによりSQLとして 管理可能となり、CREATE PROCEDURE実 行によるSyntaxエラーの即時検知が可能

    に。検証サイクルを高速に回せるようになっ た。 Syntax評価 / Syntaxエラーの即時検知
  29. AXA PowerPoint presentation for attempt in range(1, max_retries + 1):

    if error_type == "syntax_error": fix_prompt = f""" The following Databricks SQL has a syntax error. Please fix it. Error message: {current_error} SQL: {current_sql} Please return only the corrected SQL. """ Tips エラーメッセージの活用 Syntaxエラーの場合、エラー メッセージをコンテキストに 含めてリトライする Syntax評価 / エラー内容を活用してリトライ 1 トレーシング リトライ回数やエラーメッセージ、 変換結果等をローカルに書き出 し、デグレの検知やツールの改善 に活用 Syntaxエラー時は、エラーメッセージを活用してリトライ。リトライ回数やエラーメッセージをローカルに出力し、ト レーシングを実施。デグレ検知や変換ツール改善に活用。
  30. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / 人間の評価とツールの改善 Syntaxエラーが解消まで繰り返し対応。Syntaxエラーは即時検知が可能で、フィードバック先もProcedureの変換処 理に限定。「ルール処理」/「LLM処理」への反映判断はトレースログをもとに人間が判断。
  31. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / Procedure実行 Syntax レベルの評価完了後、Procedure を実行し、データ比較評価を実施する。
  32. AXA PowerPoint presentation Procedure実行 / dbtを活用して実行制御 {{ config( tags=['{proc_name}','{parent_proc_name}','batch','{schema}'], pre_hook=[

    """ BEGIN DECLARE should_execute_today BOOLEAN; SET should_execute_today = ( SELECT bizday FROM calendar_func(...) ); IF should_execute_today THEN CALL {proc_name}(`key` => `value`); END IF; END; """ ] ) }} SELECT max(current_timestamp()) FROM {{ ref('{ proc_model }') }} 1 2 3 pipenv run dbt run --select tag:{ proc_name } --threads 5 Tips タグによる実行制御 Procedure / Schema / Batch 単位で実 行。単体→結合テストと段階的に検 証可能 Hooks内でProcedure実行 社内のカレンダー条件に応じた動的 制御 refによる依存関係管理 dbtのref機能で実行順序を自動的に 制御 1 2 3 dbt の pre_hook を活用し、Databricks Procedure の実行を制御。tag による単体実行や dbt retry による失 敗した Procedure の再実行、threadsによる並列実行数の制御が可能。
  33. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / データ比較評価 Procedureで更新されたテーブルを比較 Procedure実行後、Procedureにより更新されたテーブルとOracleの正解データを比較し、変換結果を評価。
  34. AXA PowerPoint presentation データ比較評価 / dbt audit helperを活用 {{ config(

    tags=['{ proc_name }_test','compare_queries_summarize', '{ schema_name }','{ table_name }'] ) }} {% set oracle_query %} select * from {{ ref('table_name') }} {% endset %} {% set databricks_query %} select * from {{ ref('table_name') }} {% endset %} {{ audit_helper.compare_queries( a_query = oracle_query, b_query = databricks_query, summarize = true ) }} 1 pipenv run dbt run --select tag:{ proc_name }_test,tag:compare_summarize Tips 評価方法に応じたタグを付与 Procedure名・評価方法に応じたタ グを更新テーブルへ付与。タグ設 計により原因調査を効率化 1 dbt audit helper で Procedure 実行後に更新されたテーブルを比較し、カラム/レコード単位の差分と一致率 を評価。比較結果を集約したサマリテーブルを dbt test で検証し、差分の有無を検出する。 { table_name }_compare_queries_summarize in_a in_b count percent_of_total true true 3 75.00 false true 1 25.00
  35. AXA PowerPoint presentation LLM × dbt ワークフロー / 人間の評価と改善 正解データ

    (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure 実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) Syntax feedback & retry automatically ルール処理 (後処理) Oracle互換対応として データの前処理が必要 ルール処理での対応は難しいの で、LLM処理で対応しよう テーブル定義でデフォル ト値の考慮漏れ 依存関係を定義するメタ情 報に問題あり ルール処理の方が正確なの で、ルール処理で対応しよう コンバージョン結 果に問題あり Oracle互換のUDFに問題あり データ型でOracle互換の 考慮が漏れている Procedureの更新テーブルを定義す るメタ情報に問題あり Syntaxエラーと異なり、データ比較ではフィードバック先が多岐に渡る。人間が判断して適切な処理にフィード バックを反映し、再発防止する。
  36. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / ソーステーブル評価 静的日付断面でProcedureの単体・結合テストを実施後、フィードバック反映済みの評価環境を正解データとし て、S3経由でロードされるソーステーブルとの差分を評価し、必要な前処理を行う。
  37. AXA PowerPoint presentation 正解データ (Oracle) データ前処理 (Oracle互換対応) LLM処理 Syntax評価 Procedure

    実行 データ比較 評価 (Runtime・Data) ORACLE JDBCロード 人間評価 Human in the loop Apply feedback S3 COPY INTO ローデータ (Bronze) データ前処理 (Oracle互換対応) ソーステーブル比較 ルール処理 (前処理) ルール処理 (後処理) Syntax feedback & retry automatically LLM × dbt ワークフロー / 日次で継続監視 静的日付断面でのソーステーブル及び、 Procedure 結合テスト完了後、日次ワークフローに組み込み、検証。 日次で洗い替えられるソーステーブルを用いて比較評価を行い、差分を継続的に監視する。
  38. AXA PowerPoint presentation OLTPとOLAPの違いによる性能課題に直面 原因 インデックス前提の設計 ループ処理などN+1問題系のクエリは軒 並み遅延(一部10時間越え) 小規模なテーブル 100MB未満のテーブルで、OLTPに最

    適化されている 結果 バッチ処理 バッチ処理のSLAを満たせない VBAアプリ 数秒の処理が数十秒〜数分まで遅くな り、ユーザーとの合意に至らない OLTP向けに最適化されたPL/SQLを、OLAPのDatabricksへ移行したことで、性能課題に直面。インデックス前提の 処理や小規模テーブル中心の設計が適合せず、バッチ処理・VBAアプリともに対応が必要となった。
  39. AXA PowerPoint presentation S3 Databricks バッチ処理 QuickSuite Sales MIS移行 バッチ処理結果を連携

    RDS Oracle バッチ処理の対応 「N+1問題」系のループ処理をJOINでリファクタ 既存の依存関係を最適化し並列実行 Procedure実行をdbtのPythonモデル からSQLモデルに変更 25% 改善 50% 改善 VBAアプリ対応 Phase 2のQuickSuite移行へ向けた暫定対応として RDS Oracleを構 築。Databricksのバッチ処理結果をRDS Oracleへ連携し、OLTPを前提 に作られているVBAアプリのパフォーマンス要件に対応 Phase 2で廃止予定 VBAアプリ PL/SQL ローレイテンシー バッチはDatabricks向けに最適化し、VBAアプリは性能要件を満たすことは難しいので、最小限のコストで実現できる RDS Oracle で暫定対応。Phase 2のQuickSuite移行で、VBAアプリとRDS Oracleをまとめて廃止する方針とした。 OLTPとOLAPの違いによる性能課題の対応
  40. AXA PowerPoint presentation 01 データ比較の フィードバックを反映 比較結果に基づくフィードバックがプロンプ トに追加される 02 コンテキストが

    肥大化 蓄積されたフィードバックによりコンテキスト が膨張する 03 精度のデグレ 肥大化したコンテキストにより変換精度が 低下する フィードバック蓄積 → コンテキスト膨張 → 精度低下 の悪循環が発生 フィードバック蓄積に伴う LLM変換精度低下 フィードバック蓄積によりコンテキストが肥大化し、LLMの変換精度が不安定化。LLMに渡す情報を削減し、定型処理はルー ル化。トレースログを元に変換精度の低下を検知し、必要に応じてプロンプトのバージョンを戻して対応。
  41. AXA PowerPoint presentation データ比較評価における差分の原因調査 データ比較評価では差分原因が多岐にわたり、dbtで検証を自動化し、Procedure単体から結合テストへ段階的に 進めたものの、結合テストでは依存関係やデータ起因の差分により原因調査が難航した。 課題 差分原因が多岐にわたる データ比較評価の差分原因は テーブルDDL

    / UDF / データ前処理 / 変換ツール / 依存関係などのメタ情報 等多岐にわたるため、 原因の切り分けがが必要。 正解データとなる途中状態がない 複数PL/SQLで更新されるテーブルは、 Procedure単体 実行後の正解データが存在せず、単体での評価が難し い。依存関係を考慮し、最終更新断面での評価となり、 原因の特定に時間がかかる 再評価のたびに環境構築が必要 参照系と異なり、更新処理を伴うため、再評価のたびに 実行前の状態へ戻す必要がある。評価環境の構築は 自動化しているが、検証サイクルは遅くなる。 結合テストの原因特定 単体テスト→結合テストと検証を進めたが、結合テスト で差分がでた際、依存関係を考慮した原因特定が困難 だった
  42. AXA PowerPoint presentation プロジェクト達成状況: Phase 1 ゴール ステータス 主な実績 オンプレOracleの年内廃止(グローバル要件)

    完了予定 VBAアプリの対応完了後に廃止予定 バッチ処理 PL/SQL 約850本の移行 完了 バッチ処理のDatabricks移行が完了し、リリースし、 並行稼働期間中 VBAアプリ PL/SQL 約180本の移行 完了予定 VBAアプリ廃止までの暫定対応として、RDS Oracleに変更。社内のセキュリティ要件を満たす ため、接続方法等変更の上対応中 ダッシュボード約150本の移行 完了 バッチ処理結果を用いたダッシュボード(Sales MIS)のQuickSuite移行 Aurora PostgreSQLの廃止準備 完了 バッチ処理のリリースに伴い、QuickSuiteの参照 先をAurora PostgreSQLから変更済み
  43. AXA PowerPoint presentation 得られた成果 ビジネス価値 • グローバル要件の年内達成 • ダッシュボードの開発速度を 向上(QuickSuite

    × Databricks) • 150本のダッシュボードを QuickSuiteへ移行 • オンプレOracle/Auroraのコ スト削減 • Databricksが得意とする過去 データや横断的なデータを活 用した分析 工数削減効果 約 5000 MD 運用負荷・ガバナ ンス強化 • Unity Catalogでの権限・デー タの一元管理 • 権限管理・ログ監査性の向 上によるリスク低減 • タイムトラベル機能によるリカ バリ • オンプレOracle/Aurora の 管理工数削減 ※ 工数削減効果は本プロジェクトでの実績値であり、利用ツールや体制により変動します マニュアル及び既存の変換 ツールとの実績を元に比較 PL/SQLのデータ比較評価本数 を指標に工数を算出
  44. AXA PowerPoint presentation OSSコントリビュート機会 9 PRs 2 Dual Projects OSS

    Title PR dbt-databricks Fix ACL permissions not applied to notebook jobs created by DBT Python model #1015 dbt-databricks Fix DBT Python Model Canceled Notebook Job Treated as Successful #985 dbt-databricks Fix dbt incremental_strategy behavior by fixing schema table existing #530 dbt-databricks Add DBT_DATABRICKS_UC_INITIAL_CATALOG Option #537 dbt-databricks Eliminate the conversion of the schema to lowercase for schema-related test #541 dbt-databricks Add schema option for testing #538 terraform-provider-databricks Sort based on the Task Key specified in the 'Depends On' field #3000 terraform-provider-databricks Fix sql table column type upper and lower mismatch error #3501 terraform-provider-databricks Added an item to check if the ticket opener wants to do a bug fix #3020
  45. AXA PowerPoint presentation 今後の展望: Agent Skillsによるデータ比較評価の更なる自動化 dbtタグを指定 /test データ比較して 手順タグ(例:PRJD0100_PRP0201006)

    を教えてください。 PRJD0100_PRP0001001 PRJD0100_PRP0001001.sql:17 Agentが自動実行 Procedure実行 該当Procedureを実行 データ比較 対象テーブルを比較 dbt test実行 6テストを実行 PR作成 ローカルのProcedure修正からPRまで データ比較・ dbt testまで完了 全ステップ完了。結果サマリー: ステップ 結果 SP実行 (PRJD0100_PRP0001001) PASS=1 データ比較 (6テーブル) PASS=6 dbt test (6テスト) PASS=6 ローカル修正 検証(比較・テスト) PR作成まで自動化 ※ 本評価はAXAで利用可能なGitHub CopilotのSkillsサポート前に実施。今後のマイグレーションでの活用を検討 データ評価タスクをSkill化し、dbtをエージェントから扱えるツールとして定義することで、データ比較評価をさらに自 動化できる。今回はタイミングが合わなかったが、今後のマイグレーションでの活用を検討。
  46. AXA PowerPoint presentation まとめ PL/SQL → SQL Scripting / Procedure

    • PL/SQLの機能要件を満たしつつ、 SQL管理が可能 • 構文検知など評価検証サイクルを高速化 LLM × dbt 改善サイクル • LLM × ルール処理でPL/SQL変換ツールを内製 • dbtでデータ準備・実行・比較し、変換結果を評価 • 評価結果を人間が確認し、フィードバック改善 直面した技術課題 • OLTP/OLAP差異による性能劣化 • コンテキスト肥大化による LLM変換精度低下 • データ比較評価の差分原因調査 成果 • LLMとdbtを活用し 約5,000MD の工数削減 • グローバル要件の達成および、コスト削減 • ダッシュボード開発速度向上、今後のデータ活用 • 運用負荷の低減とガバナンス強化 LLM × dbt の改善サイクルで、 Oracle → Databricks マイグレーションを加速