Oracle DB と在庫DB を Snowflake にレプリケーションして Power BI で結合・可視化する方法

表紙

こんにちは。CData Software Japan でセールスチームを担当している小島です。

私はCData Software Japan にジョンする前、約18年間に渡りハードウェアの営業をしてきました。
当時、いつも課題に挙がっていたのが在庫、納期の確認と短縮交渉でした。シンプルですが労力が必要な作業です。
在庫管理システムはあるのに、案件管理システムとは別のDB にデータが格納されているため、案件ごとにマニュアルで在庫や納期確認をするのは非効率でありとても面倒です。
そこで、在庫データを案件データに結合して、リアルタイムにウォッチする方法をご紹介します。

本記事では、データの統合とリアルタイム分析を効率的に行うため、CData Sync を活用してOracle データをSnowflake にレプリケーションし、Power BI で結合・可視化するシナリオを紹介します。
データモデルの設計を通じて、どのようにデータが結合されてビジネスインサイトを得られるのかを明示しています。

CData Sync とは?

CData Sync は、レポーティング、アナリティクス、機械学習、AI などで使えるよう、社内のデータを一か所に統合して管理できるデータ基盤をノーコードで構築できるETL ツールで、以下の特徴を持っています。

・Oracle をはじめとする数百種類のSaaS / DB データに対応
・Snowflake など多くのRDB、データレイク、データストア、データウェアハウスに同期可能
・業務データのデータ分析基盤へのETL / ELT 機能に特化し、極限まで設定操作をシンプルに
・主要なSaaS データの差分更新やCDC(Change Data Capture、変更データキャプチャ)のサポート
・フレキシブルなSQL / dbt 連携での取得データの変換

1.使用するテーブルとデータモデル

以下のテーブルを使用し、統合されたデータモデルを構築します。

テーブル一覧
1. Oracle データベース

  • ACCOUNT:
    AccountID (主キー): 顧客を一意に識別
    AccountName: 顧客名
    Industry: 業種

  • CONTACT:
    ContactID (主キー): 連絡先を一意に識別
    AccountID (外部キー): 関連する顧客のID
    FullName: 連絡先の氏名

  • OPPORTUNITY:
    OpportunityID (主キー): 案件を一意に識別
    AccountID (外部キー): 関連する顧客のID
    ProductName: 案件で扱う製品名
    OpportunityValue: 案件の金額

  • QUOTE:
    QuoteID (主キー): 見積を一意に識別
    OpportunityID (外部キー): 関連する案件のID
    QuoteAmount: 見積金額

  • LINEITEM:
    LineItemID (主キー): 見積明細を一意に識別
    QuoteID (外部キー): 関連する見積のID
    ProductName: 見積製品名
    Quantity: 見積数量
    Oracle DB

2. MySQL データベース(CSV ファイルなども可)

  • inventory:
    ProductName (主キー): 製品名
    StockQuantity: 製品の在庫数
    WarehouseLocation: 倉庫所在地

データモデルの設計

  • ACCOUNT → OPPORTUNITY
    リレーション: AccountID
    意味: 顧客が所有する案件情報

  • OPPORTUNITY → QUOTE
    リレーション: OpportunityID
    意味: 案件に紐づく見積情報

  • QUOTE → LINEITEM
    リレーション: QuoteID
    意味: 見積ごとの明細情報

  • LINEITEM → inventory
    リレーション: ProductName
    意味: 見積製品の在庫状況

データモデルの用途

  • 顧客と案件情報の管理
    顧客ごとの案件進捗状況や見積データを管理

  • 優先案件の在庫確認
    案件金額と在庫状況を結びつけ、優先度の高い案件に必要な在庫を確認

  • 在庫管理の最適化
    各案件に対する製品の在庫不足を早期に特定し、計画を立てる

2. レプリケーションフロー

Oracle とMySQL データのSnowflake への同期

Oracle → Snowflake:
CData Sync を利用し、Oracle データをSnowflake にレプリケーション。

手順
CData Sync をダウンロードします。(※30日間のトライアル版あり)
CData Sync (On-Premise / Self-Hosted):
https://www.cdata.com/jp/sync/trial/

インストール手順の記事はこちら:
https://www.cdata.com/jp/blog/cdatasync-handson-2023

CData Sync の管理コンソールにアクセスしたら、接続タブをクリックし、Oracle Connector をダウンロードします。
必要な設定項目を入力して設定を保存します。

Oracle Connector

Oracle 接続設定

より詳細な設定手順はこちらの記事を参照してください。
Snowflake にOracle のデータを連携・統合する方法:
https://www.cdata.com/jp/kb/tech/oracledb-sync-snowflake.rst

同様にMySQL Connector 選択し、必要な設定項目を入力して設定を保存します。

より詳細な設定手順はこちらの記事を参照してください。
MySQL にOracle のデータを連携・統合する方法:
https://www.cdata.com/jp/kb/tech/oracledb-sync-mysql.rst

Snowflake Connector 選択し、必要な設定項目を入力します。
本シナリオではSnowflake データベース(JP)、スキーマ(TEST)としています。

snowflake設定

ジョブタブをクリックし、ジョブの作成を行います。

Oracle → Snowflake

ジョブの作成

タスク画面ですべてのテーブルを選択します。

タスク作成
高度な設定の「テーブル名のプレフィックス」に「Oracle_」を入力します。(※任意)
レプリケーションした際のテーブル名にOracle_が付与されます。

MySQL → Snowflake
タスク画面でinventory テーブルを選択します。

ジョブの作成2
高度な設定の「テーブル名のプレフィックス」に「MySQL_」を入力します。(※任意)
レプリケーションした際のテーブル名にMySQL_が付与されます。

作成したジョブを実行するとSnowflake のデータベース(JP)、スキーマ(TEST)に各テーブルがレプリケーションされます。

Snowflake DB

3. Power BI での結合と可視化

Power BI で「データ取得」→「Snowflake」を選択し、Snowflake データベース(JP)とスキーマ(TEST)を指定。

リレーションシップ設定:
Power BI のモデルビューで以下の結合を作成:
Oracle_ACCOUNT.AccountID → Oracle_OPPORTUNITY.AccountID
Oracle_OPPORTUNITY.OpportunityID → Oracle_QUOTE.OpportunityID
Oracle_QUOTE.QuoteID → Oracle_LINEITEM.QuoteID
Oracle_LINEITEM.ProductName → MySQL_inventory.ProductName

可視化の作成:
案件ごとの在庫状況を表形式で表示します。

PowerBI

作成した表を確認してみると、テスト株式会社と株式会社123の在庫がないことがわかります。

4. 参考情報 ログマイナー(LogMiner)による差分更新

CData Sync でOracle の差分更新を行う場合は、ログマイナー(LogMiner)やフラッシュバック(Flashback)のログを利用します。
この機能を利用することで、Oracle DB への負荷を軽減することができます。
ログによる差分更新を行う場合は、Oracle DB の管理者や有識者への相談が必要です。
1年分などレコード数を絞ったリードレプリカがある場合は、差分更新機能を使わないという選択肢を取ることもできます。

# Log Miner(Oracle の設定ON の場合)
Oracle8.1以上
https://docs.oracle.com/cd/E57425_01/121/SUTIL/GUID-0BC1D343-0577-4DC4-9DBA-083194560D13.htm

CData Syncからの利用方法
https://www.cdata.com/jp/blog/sync-oracle-cdc 

# Flashback(Oracle の設定ON の場合)
Oracle Databaseがバージョン10.0
https://docs.oracle.com/cd/E16338_01/appdev.112/b56259/adfns_flashback.htm

CData Syncからの利用方法
https://www.cdata.com/jp/blog/cdatasync_oracle_flashback

# SQL による差分抽出方法(Oracle の設定OFF の場合)
更新日付等で条件指定したクエリでの差分抽出:
差分更新未対応のデータソースでもCDataSyncで差分更新させる方法:
https://www.cdata.com/jp/blog/2020-08-17-170236

5. まとめ

Oracle と MySQL にある在庫データをSnowflake にレプリケーションしてPowerBI でデータ結合と可視化を行う方法をご紹介しました。
案件情報に在庫情報を結合させることで、状況の把握が可能になり、在庫がないものは事前に対策を打つことができます。
実際には在庫データの更新方法なども検討が必要です。データを上手に活用して生産性の向上を図りたいという方は、ぜひ弊社または弊社パートナーまでご相談ください!

トライアル・お問い合わせ

関連コンテンツ