導入事例:会員名簿の「髙橋さん」が「?橋さん」にならないように ― Emulus Consulting の Oracle → Databricks 移行
― 「髙」と「﨑」が化けない移行 ― Shift_JIS の Oracle DWH を UTF-8 のレイクハウスへ
概要
- 提供:Innovational Office Solution + Databricks Lakebridge
- お客様:Emulus Consulting
- 移行対象:テーブル 1,850 本(42 TB)、PL/SQL パッケージ・プロシージャ 640 本、マテリアライズドビュー 96 本、スケジューラージョブ 310 本
- 自動変換精度:初期段階で 82% を自動変換(70%~90% の範囲)。残りは専門家の調整と業務部門の確認で完了
- お問い合わせ:Admin@innovationalofficesolution.com
- 無料PoC:AnyBI to Power BI & AnyETL to Fabric ページ
背景:20年分のデータと、新しい問い
Emulus Consulting が支援する流通業のお客様は、2000年代から Oracle を DWH として運用してきました。約 280 店舗の POS 実績、約 450 万人の会員情報、商品マスタ、発注データが蓄積され、毎朝の売上日報や月次の商品分析を支えてきた基盤です。
Oracle Database 19c は Premier Support が2029年12月31日、Extended Support が2032年12月31日まで提供されており、ソフトウェアの期限に追われていたわけではありません。移行のきっかけは事業側からの新しい問いでした。
「天候や曜日、販促を加味した需要予測で、店舗ごとの発注量を自動で提案できないか。」
需要予測には、数年分の POS 明細と外部データを機械学習で扱う必要があります。分析のたびに Oracle から CSV を抽出して別のサーバーに運ぶやり方では、量的にも鮮度的にも限界がありました。データと機械学習を同じ場所で扱える Databricks への移行が決まりました。
見落としがちな最大のリスク:文字コード
このデータベースは日本語キャラクターセット JA16SJISTILDE で構築されていました。移行先の Databricks(Delta Lake)は UTF-8 が前提です。単純に変換すると、次のような問題が起こります。
| 異体字(いわゆる外字・旧字体) | 髙、﨑、德、栁 | 「?」や別の文字に化ける、名寄せが崩れる |
|---|
| 機種依存文字 | ①~⑳、㈱、Ⅲ、№ | 商品名・住所が化ける、検索で一致しない |
|---|
| 波ダッシュ・全角チルダの揺れ | 〜 と ~ | 同じ商品名が別物として扱われる |
|---|
| 半角カナ | カブシキガイシャ | 全角との混在で名寄せが崩れる |
|---|
| 文字数ではなくバイト数で切った項目 | SUBSTRB で切った名称 | 2バイト文字の途中で切れた不正なデータ |
|---|
会員名簿の「髙橋さん」が「?橋さん」になれば、DM の宛名もポイントの名寄せも狂います。Emulus は、文字コード変換をコード変換と同じ重さの独立したワークストリームとして扱いました。
移行アプローチ
STEP 1|アセスメント
データディクショナリ、実行履歴、スケジューラー定義から依存関係と実行頻度を可視化しました。Lakebridge の評価機能の結果もあわせて、売上・会員・商品の業務領域ごとに4つの移行ウェーブを決めています。過去 12 か月参照されていないテーブル 410 本(全体の 22%)は移行対象から外しました。
STEP 2|文字コードの全件スキャン
文字列列 3,200 列、約 61 億件を全件スキャンし、UTF-8 へ変換したときに問題が起きる文字を列ごとに洗い出しました。該当したのは約 18 万件、文字の種類で 1,140 種です。見つかった文字は、①正しく対応する UTF-8 の文字に変換するもの、②業務ルールで正規化するもの(波ダッシュの統一、半角カナの全角化など)、③業務部門の判断が必要なもの、に仕分けし、変換表として管理しました。
STEP 3|データ移行
大きなファクトテーブルはパーティション単位で並列に抽出し、変換表を適用したうえで Delta テーブルとして Bronze 層に格納しました。切り替えまでの6週間は、更新タイムスタンプによる差分同期を続けています。
STEP 4|PL/SQL の変換
Lakebridge のコンバーターで Oracle SQL を Databricks SQL に変換し、手続き的な部分は本アクセラレーターが担当しました。
- 集合処理で書けるロジック → Spark SQL
- カーソルループ・行単位処理 → 集合演算の MERGE または PySpark
- SUBSTRB / LENGTHB などバイト単位の文字列関数 → 文字単位の関数に書き換え(意図を業務部門に確認)
- DBMS_SCHEDULER → Lakeflow Jobs
初期自動変換精度は 82% でした。
STEP 5|突合(PulseQA)
件数・合計値・NULL 件数に加えて、文字列列のハッシュ比較を行い、変換表どおりに変わった文字以外に差がないことを確認しました。Oracle では空文字('')が NULL として扱われる点も、全文字列列でチェックしています。
Oracle と Databricks の対応表
| テーブル(JA16SJISTILDE) | Delta テーブル(UTF-8) |
|---|
| PL/SQL パッケージ・プロシージャ | Spark SQL / PySpark |
|---|
| カーソル FOR ループ | 集合演算の MERGE INTO |
|---|
| SUBSTRB / LENGTHB | substring / length(文字単位) |
|---|
| MERGE | Delta Lake MERGE INTO |
|---|
| DECODE / NVL | CASE / COALESCE |
|---|
| マテリアライズドビュー | Gold 層テーブル(ジョブで更新) |
|---|
| DBMS_SCHEDULER | Lakeflow Jobs |
|---|
| VPD | Unity Catalog の行フィルター・列マスク |
|---|
成果
- PL/SQL 640 本を初期自動変換精度 82% で移行(プロジェクト期間 22 週間)
- 文字列列 3,200 列、約 61 億件のデータで文字化けゼロを確認
- 夜間バッチ:6 時間 40 分 → 55 分
- 移行後 4 か月で、店舗別需要予測モデルを本番化(対象 280 店舗)
- 予測にもとづく発注提案で、生鮮・日配の廃棄ロス 17%・欠品 23% を削減
- Oracle の分析用途リソースを 64% 削減
文字コードの診断から始めませんか
御社の PL/SQL バッチ5本と主要テーブルの文字コード診断を、無料で実施します。
無料PoC(概念実証)
Microsoft Solution Partner
20年分の Shift_JIS 系 Oracle DWH(40TB+)を UTF-8 の Databricks レイクハウスへ。外字・機種依存文字の完全対応と PL/SQL の PySpark 自動変換を実現します。
外字・旧字体(髙、﨑等)の文字化け防止マッピング初期自動変換精度 82% で PL/SQL を PySpark 化Shift_JIS / CP932 全件スキャンツール提供主要テーブルと PL/SQL 5 本で文字コード無料診断 発行:Office Solution AI Labs(Microsoft Solution Partner for Data & AI)
#日本語#Oracle#Databricks#Shift_JIS#外字対応#UTF-8#Delta Lake#事例