資料 - Oracle

#odddtky
for your Skill
Oracle DBA & Developer Days 2014
データベース技術者に最適のETL
-データ統合開発基盤を体験!
Oracle Data Integrator 12c
知久裕之
シニアセールスコンサルタント
日本オラクル株式会社
データベース事業統括 製品戦略統括本部
データベースエンジニアリング本部
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
使える実践的なノウハウがここにある
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明する
ものです。また、情報提供を唯一の目的とするものであり、いかなる契約
にも組み込むことはできません。以下の事項は、マテリアルやコード、機
能を提供することをコミットメント(確約)するものではないため、購買決定
を行う際の判断材料になさらないで下さい。オラクル製品に関して記載さ
れている機能の開発、リリースおよび時期については、弊社の裁量により
決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
3
アジェンダ
1
開発手順の概要
2
実機で体験! ODI 12c ハンズオン
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
4
開発手順の概要
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
5
Oracle Data Integration
リアルタイムからバッチ処理まで使い分け/組合わせで最適なソリューションを提供
低負荷・高速なログベースの
リアルタイムレプリケーション
DBを最大活用
した高速変換
Oracle GoldenGate
ODI
ログ
Apps
Database
Transform
Application
BigData
Cloud
Oracle Data Integrator
高速なバルクロード
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
6
Oracle Data Integrator のE-LTアーキテクチャ
DBMSをエンジンとし「高速」「シンプル」「高い生産性」を実現するE-LT
Database
DBs
DBs
実
行
環
境
BigData Cloud
Apps
ODI Agent
Target Tablel
Staging Area
(データ変換領域)
ODI Agent
Excel
リポジトリ
スキーマ
Flat File/XML
ODI Agent
– ETL処理自体は主にDB内で行い(JDBC接続の場合はデー
タがHeapを介する)、Agentは指揮者的役割を担う。リス
ナー(外部ジョブスケジューラ等からのリクエストを受ける)
兼スケジューラー(ODI自体のスケジューリング機能) として
働く。
– リポジトリにアクセスし、ジョブやスケジュール情報を取得
し、各データソースにSQL等のコードを投げ、適宜リポジトリ
にロギングを行う。
– 軽量なStandaloneのJavaプロセス。Weblogic Serverへデプ
ロイする構成も可能。
ODIリポジトリスキーマ
開
発
・
運
用
ジョブ管理ツール
(sh/cmd, Webサービス)
ODI Studio
(開発ツール)
メタデータ
管理ツール
– 接続先システムの環境情報やユーザ情報、開発資産やロ
グ等を一元的に格納/管理
Staging Area
– データ変換領域(ODIが一時表を自動生成)
– デフォルトではターゲットに配置(ODI Studio内で指定可能)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
7
Oracle Data Integrator のE-LTアーキテクチャ
データのある場所で変換/不要なデータ移動を抑制
従来型ETLアーキテクチャの限界
データ抽出に
時間がかかる
参照データを移動
するコスト
DB2
ロードに
時間がかかる
Exadata
SQL Server
MySQL
様々なデータソース/言語に
最適なコードを生成
DB2
SQL Server
十分に活用
できない
Hadoop
中間ETLサーバがボトルネックとなり
Exadata等の処理性能を十分に活かせない
ODIによる次世代E-LTアーキテクチャ
Oracle Data Integrator
Knowledge Module
(コード生成フレームワーク)
EExtract
LLoad
Exadata
T
Transform
MySQL
十分に活用
有効活用
できない
データのある場所で変換
=不要なデータ移動を抑制
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Hadoop
8
オペレータ(実行状況/結果のモニタリング)
ODI Studio
統合開発環境
ODI Studio には4つのタブがあり、接続先
システムの環境情報の設定(トポロジ)、
ジョブの設計開発(デザイナ)、実行状況/
結果のモニタリング(オペレータ)、ユーザ
情報の管理(セキュリティ)を1つのGUI画面
から行えます。
デザイナ(ジョブ/ジョブフロー等の定義)
トポロジ(接続先システムやエージェントの設定)
セキュリティ
・ODIユーザの権限・プロファイルの管理
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
9
ODIによる開発の流れ
初
期
設
定
1. 接続先システムの設定
トポロジ
– 物理スキーマ (サーバ情報、DB情報)を登録
– 論理スキーマを定義し、コンテキスト(開発/本番等の用途)毎に物理スキーマを紐付け
2. メタデータの抽出
デザイナ
– テーブルやファイルの定義を登録 (実テーブル/ファイルから抽出することもODI上で定義することも可)
3. ジョブ・ジョブフロー等の定義
メ
イ
ン
の
開
発
作
業
– 単体のジョブ(マッピング、プロシージャ)の作成
– ジョブフロー(パッケージ)の作成
4. テスト実行・モニタリング
デザイナ
オペレータ
– オペレータ画面にてモニタリング
5. シナリオ化・運用設計
– 本番用の実行コードを生成 (シナリオ化≒コンパイル)、ジョブネット(ロード計画)の作成
– スケジューリングや外部スケジューラ連携等の検討
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
デザイナ
10
ODIによる開発の流れ
1.接続先システムの設定
初期設定として、ソース/ターゲット
を含めて接続先を予め登録
物理スキーマ
2.メタデータの抽出
実テーブルやファイルから
定義情報をODIに取込む
コンテキスト
3.ジョブ・ジョブフロー等の定義
4.テスト実行・モニタリング
メインの開発作業として
デザイナでジョブを作成
5.シナリオ化・運用設計
プロジェクト
モデル
論理スキーマ
パッケージ(ジョブフロー)
Prod
本番用のソース
やターゲット
マッピング
データ
ストア
Deve
開発用のソース
やターゲット
トポロジで設定
デザイナで設定
プロシージャ
(マニュアルスクリプト)
実行環境の追加/
修正/切替が容易
既存の表定義をODIの
メタデータにリバース
新規接続先
(DB、Fileなど)
GUIで
開発
シナリオ(≒コンパイル)
ロード計画(ジョブネット)
ODI定義情報
マッピング例
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
パッケージ例
11
トポロジ
1.ODI接続先システムの設定 物理アーキテクチャ
①データサーバーの定義
①データサーバーの定義
ServerやDBの接続情報を定義
②物理スキーマの定義
②物理スキーマの定義
DBスキーマやファイルの
ディレクトリ等を指定
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
12
トポロジ
1.ODI接続先システムの設定 論理アーキテクチャ
③論理スキーマの作成とコンテキストを利用した物理スキーマとの紐づけ
論理スキーマと
物理スキーマを
コンテキストで紐付け
論理スキーマ
(設計開発)
一度定義したジョブは、実行時にコンテキストを
指定することで実行環境を容易に切替可能です
(開発/検証/本番環境など)
物理スキーマ
(実行環境)
Oracle
開発
検証
ODI_DEVE
ODI_DATA1
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
本番
ODI_PROD
13
デザイナ
2.モデル作成 ―メタデータ抽出
開発環境サーバ、
アプリケーション
ERP
Data Warehouse
設計環境
ODI リポジトリ
DBやファイルに接続して定義情報を
リバース・エンジニアリングします。
CRM
Files / XML
ESB
Legacy
リバースボタン
リバース対象を選択
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
14
デザイナ
3-1.マッピング作成のイメージ
ODIは異種DB対応のSQLコード・ジェネレーター
①論理設計(What)
③SQL等を自動生成
・SQLによる高速処理
②物理設計:
実装テンプレートを選択
(HOW)
・処理内容がSQLで確認
できBlack Box化を抑止
多様なデータソースに最適化
された SQLのひな型
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
・コードの標準化により
バグ減少/コード品質安定
15
デザイナ
3-1.マッピング作成例
開発者による設定作業
Step1:論理設計
Knowledge Module
(内部的な実装コードが定義されたテンプレート)
File
File
例:LKM File to Oracle (EXTERNAL TABLE)
Table
Target
Table
Step2:物理設計(Knowledge Moduleの選択)
Table
ETL処理のコードのひな形が
多ステップで定義されている
Target
Table
File
File
KM(実装テンプレート)を選ぶだけ
細かな実装は記述不要
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
16
デザイナ
3-1. マッピングの物理設計で利用するKnowledge Module
マッピング処理内で利用。ETLに必要なステップ(コード)が定義されている
メタデータのリバース
エンジニアリング
リバース
ソースから
差分データ読取
ソースから
一時領域へロード
RKM
LKM
ロード前整合性チェック
ステージングエリア
変換の統合、最適化
された手法によ
るターゲットへ移動
IKM
ロード
CDC
WS
統合
チェック
ジャーナライズ
ソース
データ処理/変換を
サービス化して公開
JKM
WS
サービス
ターゲット表
SKM
エラー表
CKM
WS
各テクノロジに最適化された中間ステップを事前定義:Knowledge Modules (100+)
Oracle
Non-Oracle
GoldenGate
Oracle
Utilities
Oracle
DBLINK
Siebel CRM
E-Business Suite
Oracle Merge
Oracle
Web Services
Oracle
Spatial
Hadoop
IBM DB2
SAP ABAP
SQL Server
Sybase
NoSQL
JMS
Teradata
Knowledge
Moduleの利点
 開発期間の短縮 と 処理の可読性の向上
 テキストベースでカスタマイズ性が高く、ベストプラクティスを再利用し易い
 ノンプログラミングでコード品質が安定、ロジックが共通化されテスト工数削減
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
17
デザイナ
3-2. パッケージ作成
マッピング
パッケージ(ジョブフロー)
ファイル
検知
マッピング
OSコマンド
変数の結果を判
定
変数に値を
セット
プロシージャ
失敗時に
メール送信
マッピング、プロシージャ、OSコマンド
(sh/bat)、ODIのツール群(メール送受信、
FTPほか)等を並べてジョブフロー定義
プロシージャ
マニュアルコーディングを登録
(SQL、PL/SQL、Jython、Java、Groovy等)
既存資産の活用、複雑な処理、高い自由度
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
18
オペレータ
4. オペレータ:実行のモニタリング
• ジョブの実行ステータスの確認
• 詳細なランタイム統計
• 生成されたコードのレビュー
• 失敗セッションのデバッグ/再実行
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
19
デザイナ
5-1. シナリオ作成
シナリオ起動、本番リリース、スケジューリング
ODIのパッケージやマッピング等を
実行単位にシナリオ化 (≒コンパイル)
・シナリオ化により最小限の可変部を残して実行コードが生成され、リポジトリDBに格納されます。
・シナリオは、OSシェルやWebサービスによる起動、およびスケジューリング設定が可能です。
スケジューリング
本番反映
開発用
リポジトリ
本番用
リポジトリ
Export
Import
XML
OSシェルやWebサービスで起動
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
20
デザイナ
5-2. ロード計画作成
• 「ロード計画」はODIのジョブを階層的に実行制御する(ジョブネット的な)機能です。
• シナリオ、パッケージ、インタフェース、変数、プロシージャなどを組合わせて、パラレル、シリアル、
条件に応じた実行制御が可能です。
• また失敗時の再開方法や例外処理も柔軟に設定可能です。
ロード計画により
バッチを視覚的に統合管理
再開方法を柔軟に設定可能。
[上位階層]
・全ての子の再開
・失敗した子から再開
バッチの順次/並列
実行、条件分岐、
例外処理等を視覚
的、統合的に管理
[シナリオレベル]
・新規セッションから再開
・失敗したステップから再開
・失敗したタスクから再開
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
21
実機で体験! ODI 12c ハンズオン
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
22
ハンズオン・シナリオの全体
Oracle Database
Task1:
サブシステム(MySQL)に格納されている顧客データ
(MYSQL_CUST表) をDWH(Oracle DB)に連携します。
MySQL
Task1:MySQLからOracleへの連携
cust1
XR_SEG
cust2
顧客データ
mysql_cust
M/F
顧客ファイル
FCUST.csv
Hadoop Hive
フィルタ
activity=11
(販売活動)
movieapp_log_odistage
(クロスリファレンス表)
Task3:
分岐
cust3
Task2:コード
変換とUNION
結合
CUST_ID
Task 4:Oracle Big Data
SQLを用いてロード
ctry_sales
売上
集計
Task2:
メインフレームから出力された別の顧客ファイルを
マージして一緒に取り込みます。その際、システム
間でセグメントコードが異なるため変換表(クロスリ
ファレンス表)を利用してコードを読替えます。
Task3:
収入区分毎に、複数の顧客表に振り分けます。
その際、1回のSelectで条件に応じて挿入先を
振り分ける Multi Table Insert文を利用します。
Task4:
Hiveテーブルに格納された映画情報
(movieapp_log_odistage)とMySQLにある顧客情報
(mysql_cust)を結合し、地域毎(国、大陸)の売上を
集計します。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
23
Task 0:ハンズオン環境の準備
環境の起動 と トポロジとモデルの設定確認
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
24
環境準備
Virtual Box環境にログインし、DB等の関連サービスを起動します
1. Virtual Box環境にログインします。
(passwordは welcome1)
3. DB等の関連サービスを有効化します。
Oracle Database 12c、Zookeeper、HDFS、Hive、YARN(キーボードの矢印ボタン
で下にスクロールして確認)のチェックを有効化して「了解」を押下します。
すでに全て有効な場合は「取消」を押下します。
1. Passwordは
welcome1
(全て小文字)
2. デスクトップの Service アイコンをダブルクリックします。
2. ダブルクリック
4. 上記のサービスがチェック
されていれば「取消」でOK
3. チェックが有効
であることを確認
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
25
環境準備
Virtual Boxをフルスクリーン表示にします
4. 表示面を大きくとるために、画面をフルスクリーンモードに切り替えます。
画面上部の「ビュー」メニュから切り替えます。
(またはキーボードショートカットを利用する場合は、右CTRL+F キーを押下します。
フルスクリーン表示を解除したい場合も同じショートカットキーを利用します。)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
26
ODI Studioの起動/リポジトリに接続
1. ODI Studioを起動します。
(上部のメニューからODI Studioのアイコンをクリック)
1. クリック (ダブルクリックしない!ダブルクリック
すると、2つ画面が立ち上がってしまうため)
2. 「リポジトリへの接続」を押下します。
3. ODIログインダイアログにて「OK」を押下します。
2. クリック
3. OKを押してリポジトリにログイン
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
27
本ステップは設定済みのため
本ハンズオンでは省略します
トポロジで接続先システムの情報を確認
4. 「トポロジ」 の 「物理アーキテクチャ」
の 「テクノロジ」フォルダを展開します。
6. 本ハンズオンでは、ETL処理のソース/ターゲットとなる接続先
システム(Oracle、File、MySQL、Hive)の設定は実施済みです。
次スライド以降で、設定済みの情報を
確認していきましょう。
5. 未使用のテクノロジを非表示にします。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
28
本ステップは設定済みのため
本ハンズオンでは省略します
トポロジで接続先システムの情報を確認
7. データサーバー OracleMovie をダブルクリックします。
データベースへの接続ユーザやJDBC URLの情報が設定されています。
2 . 定義タブ
1. データサーバー
OracleMovie
をダブルクリック
3 . JDBCタブ
用語:
• テクノロジ:ODIがソース/ターゲットと
して利用するデータソースの種別
• データサーバー:DBサーバへの接続
設定(JDBC) や ファイルドライバの設
定(Encoding含む)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
29
本ステップは設定済みのため
本ハンズオンでは省略します
トポロジで接続先システムの情報を確認
8. OracleMovie の下にある物理スキーマ MOVIEDEMO をダブルクリックします。
ODIのソース/ターゲットとなるテーブルを格納する「スキーマ」と
ステージング領域として一時表が作成される「作業スキーマ」が指定されています。
2. スキーマ:ソース/ターゲットとなる
テーブルを含むDBスキーマ
3. 作業スキーマ:ODIの処理の過程で
一時表を作成するDBスキーマ
(実データと分けることができる)
1. 物理スキーマ
MOVIEDEMO
をダブルクリック
• 物理スキーマ: DBスキーマ や ファイ
ルの格納ディレクトリ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
30
本ステップは設定済みのため
本ハンズオンでは省略します
トポロジで接続先システムの情報を確認
9. 同様にFile についてもデータサーバと物理スキーマをダブルクリックして、どのような設定がされているのか確認して
みましょう。FileのデータサーバではJDBCドライバの設定にて、endocing=utf8 を指定します。
2. JDBCドライバの設定にて
endocing=utf8 が指定されている
1. データサーバー:FILE_GENERIC 及び
物理スキーマ:/home/oracle/work/files
をダブルクリックで開く
3. ソース/ターゲットとなるファイル
を置くディレクトリと、一時ファイル
を生成するディレクトリ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
31
本ステップは設定済みのため
本ハンズオンでは省略します
トポロジで接続先システムの情報を確認
10. 同様にMySQL、Hive についてもデータサーバと物理スキーマをダブルクリックして、どのような設定がされているの
か確認してみます。
データサーバー
物理スキーマ
Hive
データサーバー
MySQL
物理スキーマ
HiveやMySQLの設定も
確認してみます
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
32
本ステップは設定済みのため
本ハンズオンでは省略します
デザイナでモデル/データストアを確認
11. 「デザイナ」タブに移動し、モデル/データストアの情報を確認します。
「モデル」はDBスキーマやファイルのディレクトリに相当し、「データストア」はテーブルやファイルに相当します。
1. デザイナタブに移動
モデル(黄色):DBスキーマや
ファイルのディレクトリに相当
データストア(オレンジ色):
テーブルやファイルに相当
属性(列、項目)や
制約も確認可能
2. データストアを選択し、
右クリックメニューから
データも表示可能
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
33
本ステップは設定済みのため
本ハンズオンでは省略します
データストアを登録(実テーブルから定義情報を抽出)
12. OracleMovieモデルの「選択的リバース・エンジニアリング」タブにて、表定義を取込みたいテーブルを選択し、
左上のリバース・エンジニアリング」ボタンを押下します。
6. 最後に「リバース・エンジニアリング」ボタンを押す
3. チェックを入れる
2. 「選択的リバース・
エンジニアリング」
タブを選択
1. モデルOracleMovie
をダブルクリック
4. CUST1, CUST2, CUST3, XR_SEG を選択
5. CUST1, CUST2, CUST3, XR_SEG の表定義が取込まれる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
34
本ステップは設定済みのため
本ハンズオンでは省略します
データストアを登録(CSVファイルから定義情報を抽出)
13. Fileモデルにデータストアを追加し、CSVファイルから列名等の情報を取込みます。
まずは、CSVファイルの内容を確認してみましょう。確認にファイルを閉じます。
1. ダブルクリック
3. 表示する
ダブルクォーテーションで
囲われている文字列もある
1行目にヘッダーを持つカンマ区切りのCSV
2. ダブルクリック
4. ファイルの内容を確認できたら
必ずファイルを閉じましょう。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
35
本ステップは設定済みのため
本ハンズオンでは省略します
データストアを登録(CSVファイルから定義情報を抽出)
14. Fileモデルにデータストアを追加し、CSVファイルから列名等の情報を取込みます。
ファイルモデルにデータストアを追加し、FCUST.csvファイルを選択します。
3. ファイル名に合わせて名前、別名に FCUST と入力。
SQLコードが生成される際にこの別名が利用される。
1. ファイルモデルを
右クリックし、新規
データストアを追加
する
2. トポロジで設定
済みの物理ス
キーマのフォルダ
から FCUST.csv を
選択する。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
36
本ステップは設定済みのため
本ハンズオンでは省略します
データストアを登録(CSVファイルから定義情報を抽出)
15. Fileモデルにデータストアを追加し、CSVファイルから列名等の情報を取込みます。
可変長/固定長などのファイル形式を指定します。
ファイル形式: 区切り
ヘッダー(行数): 1
レコードセパレータ: UNIX (LF:Line Feed)
#MS-DOSを選択するとCRLF(Carriage Return/Line Feed)
その他をチェックし、カンマ(,)を入力
ダブルクォーテーション(“)で囲われた文字列を認識
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
37
本ステップは設定済みのため
本ハンズオンでは省略します
データストアを登録(CSVファイルから定義情報を抽出)
16. Fileモデルにデータストアを追加し、CSVファイルから列名等の情報を取込みます。
「リバースエンジニアリング」ボタンを押下し、CSVファイルのヘッダー行から列名を取り込みます。
1. 「リバース・エンジニア
リング」ボタンを押下
3. ファイルがデータスト
アとして取り込まれる
2. CUST_IDとAGEが
Numericになっていない
場合は修正します
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
38
トポロジ
参考:トポロジの用語説明
ソースやターゲットとなる接続先システムの情報を一元管理
• 物理アーキテクチャ:
– データサーバー:DBへの接続設定(JDBC) や ファイルドライバの設定(Encoding含む)
– 物理スキーマ:DBスキーマ や ファイルの格納ディレクトリ
データサーバー
物理スキーマ
• 論理アーキテクチャ:
– 論理スキーマ:
コンテキスト
• デザイナ画面でETLジョブを定義する際は、論理スキーマを参照する。
接続先システムの環境情報をETLジョブから分離し、開発間(開発→本番)の移行を容易にする。
• 開発、検証、本番など表構造(ファイル構造)が同一で、実行環境が異なる複数の物理スキーマを
論理スキーマとしてグループ化し、ETLジョブ実行時にコンテキスト(文脈)に応じて実行先を切替え
ることを可能とする。
• コンテキスト:
論理スキーマ
– 「開発」「検証」「本番」など用途に応じてコンテキストを用意し、1つの論理スキーマから
別々の物理スキーマを紐付け、実行時に切替えることが可能。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
39
デザイナ
参考:デザイナの用語説明
プロジェクト
メタデータを抽出し、ETLジョブを作成
フォルダ
• モデル:
パッケージ
マッピング
– モデル・フォルダ: モデルを分類可能
再使用可能マッピング
– モデル: DBのスキーマ、ファイルのディレクトリに相当
プロシージャ
– データストア: DBのテーブル、ファイルに相当。メタデータはODI上での定義も、実テーブル/ファイルから抽出することも可能
• プロジェクト:
– プロジェクト: ETLジョブの最大の管理単位
変数
順序
ユーザー関数
– フォルダ: ETLジョブを機能区分や接続先等で分類可能
– パッケージ: ジョブフロー。マッピング、プロシージャ、ODI Tools、変数等を組合せて成功時/例外時のフローを組む。
– マッピング: 最小粒度のETLジョブ (開発者はGUIでデータソースを論理的にマッピングし、
詳細なSQL等のコードはナレッジ・モジュールにより自動生成される)
ナレッジ・モジュール
モデル
– 再使用可能マッピング: マッピングの一部ロジックを共通部品として定義・再利用
– プロシージャ: 最小粒度のETLジョブ(マニュアルコーディングを登録)
データストア
– ナレッジ・モジュール: 主にマッピング内で利用されるコード生成テンプレート
• ロード計画とシナリオ
シナリオ/ロード計画
– シナリオ: パッケージ/マッピング/プロシージャ等を実行形態にコンパイルし、動的にコードを生成する
オーバーヘッドをなくす。シナリオ化されたコードはリポジトリDB内に格納される。
– ロード計画: ジョブネット(最大粒度のジョブの単位)。パラレル/シリアル、CASE文、再開時の挙動、例外ハンドリング等を行う。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
40
Task 1:MySQL から Oracle DB への連携
目標時間:10分
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
41
Task 1:MySQL から Oracle DB への連携
Oracle Database
Task1:
サブシステム(MySQL)に格納されている顧客データ
(MYSQL_CUST表) をDWH(Oracle DB)に連携します。
MySQL
Task1:MySQLからOracleへの連携
顧客データ
mysql_cust
cust1
Task2:
メインフレームから出力された別の顧客ファイルを
マージして一緒に取り込みます。その際、システム
間でセグメントコードが異なるため変換表(クロスリ
ファレンス表)を利用してコードを読替えます。
Task3:
収入区分毎に、複数の顧客表に振り分けます。
その際、1回のSelectで条件に応じて挿入先を
振り分ける Multi Table Insert文を利用します。
Task4:
Hiveテーブルに格納された映画情報
(movieapp_log_odistage)とMySQLにある顧客情報
(mysql_cust)を結合し、地域毎(国、大陸)の売上を
集計します。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
42
マッピングの作成
1. プロジェクト(Big Data Hands-On Lab) のフォルダ(First Folder) に新規でマッピングを作成します。
2. マッピングに名前を付ける
1_MySQL_to_Oracle
1. Big Data Hands-On Lab --> First Folder
--> マッピング とたどり、右クリックで
新規マッピングを追加する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
43
参考:操作上のコツ
設定中のタブをダブルクリックすることで拡大/縮小できます
• 画面が小さかったり、設定項目が多い場合などは、設定中のプロパティ等のタブをダブルクリックすることで、
拡大/縮小を切替えることができます。
②縮小したいタブを
ダブルクリック
①拡大表示したいタブを
ダブルクリック
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
44
データストアのDrag&Drop
2. 新規に作成したマッピング(1_MySQL_to_Oracle)の論理タブに、MySQLモデルのMYSQL_CUST 表 と
OracleMovieモデルのCUST1表をDrag&Dropします。
1. MYSQL_CUST
をDrag&Drop
「論理」タブが
選択されている
2. CUST1を
Drag&Drop
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
45
列(属性)のマッピング
3. MYSQL_CUSTの出力からCUST1の入力にDrag&Dropします。
属性(列)名により、自動マッピングを行います。
出力
自動マッピング
1. ソース(MYSQL_CUST)の
出力とターゲット(CUST1)の
入力をつなぐ
Drag&
Drop
入力
自動マッピング後
3. マッピングされた列(属性)が
グレーの矢印でハイライトされ
ることを確認する
2. 同名の列(属性)を
自動マッピングする
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
46
ターゲットデータストアへの統合タイプを選択
4. 連携先のデータストア(CUST1)を選択し、プロパティの統合タイプに「制御追加」が設定されていることを確認します。
1. ターゲット(CUST1)を選択
2. プロパティのターゲットを選択
• 参考:ODI12cでは、論理タブのターゲットデータストア
にて「統合タイプ」を選択します。
– なし
– 制御追加 (Control Append)
– 増分更新 (Incremental Append)
– 緩やかに変化するディメンション (Slowly Changing
Dimension)
※上記タイプに応じたIKM(Integration Knowledge
Module)が物理タブに表示されます。
※「なし」を選択した場合、すべてのタイプのIKM
が物理タブに表示されます。
3. 今回は挿入を行うため、統合タイ • また、チェック・ナレッジ・モジュール(CKM)を利用する
プとして「制御追加」(デフォルト)が
場合には、エラーの最大数やパーセンテージを設定
設定されていることを確認する
することができます。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
47
物理設計を行う画面に切替え
5. 「物理」タブをクリックして、物理設計を行う画面に切替えます。
論理タブ
物理タブ
「物理」タブをクリックして
切替える
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
48
参考:物理タブの主な設定箇所 (2箇所)
実行グループ
Oracle DB
(Target Group)
MySQL
(Source Group)
1. Access Point (丸いアイコン):
実行グループをまたいてロードが発生する
Access Pointにて、ロード手法を決める
Load Knowledge Module(LKM) を設定します
2. ターゲットデータストア (四角いアイコン):
ターゲット表へのデータ統合の手法を決める
Integration Knowledge Module を設定します
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
49
Load Knowledge Module(LKM)の選択
6. Load Knowledge Module (LKM) を選択します。
MySQL
(Source Group)
実行グループ
Oracle DB
(Target Group)
1. 実行グループをまたいでロードが発生する
Access Point(丸いアイコン)をクリック
2. プロパティのロード・ナレッ
ジ・モジュール・タブを選択
3.今回はMySQLからOracleへの
ロードをJDBC接続でおこなう
LKM SQL to SQL (Built-in).GLOBAL
が選択されていることを確認
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
50
Integration Knowledge Module(IKM)の選択
7. Integration Knowledge Module (IKM) を選択します。
1. ターゲット・データストア
(右端の四角のアイコン)をクリック
3. 今回はOracleのターゲット表にInsertを行う
IKM Oracle Insert.GLOBAL が設定されている
ことを確認
2. プロパティにて統合ナレッジ・
モジュール・タブを選択
• 参考:IKMは 制御追加、増分更新、緩やかに変化するディメンション(SCD) 等の統合要件で使い分けます。
• IKM例:
– IKM Oracle Insert:ODI12cより導入
– IKM SQL Control Append:追加/洗替に利用
– IKM Oracle Incremental Update:差分同期に利用
• ※ODI12.1.2から導入された「コンポーネントスタイル」KMは現バージョンではCKMを利用できません。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
4. KMの実行オプション
TRUNCATE_TARGET_TABLEを
Trueに設定
51
セッション実行前のデータを確認
8. セッション実行前にはターゲット表(CUST1)が空であることを確認します。
2. ターゲット表(CUST1)が空であることを確認する
論理タブ
1. マッピングの論理タブの
ターゲット表(CUST1)にて右
クリックしデータを表示する
1’. または、モデルツリー
のCUST1を右クリックして
データを表示する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
52
マッピング処理の実行
9. 作成したマッピング処理を保存し、実行します。
保存(Ctrl+S)
実行
OKを押す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
53
オペレータにてセッションの正常実行を確認
10. オペレータ画面にて正常実行 (緑のアイコン)
を確認します。
1. オペレータに遷移
2. リロード
ボタンを押下
参考:セッションの最上位をダブルクリック
するとセッション全体の統計が確認できる
3. セッションス
テータスが成功
(緑)であること
を確認する
参考:個々のタスクをダブルクリックすると、その
タスクの統計やSQL等のコードが確認できる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
54
セッション実行後のデータを確認
11. ターゲット表(CUST1)にデータが挿入されたことを確認します。
論理タブ
1. マッピングの論理タブの
ターゲット表(CUST1)にて右
クリックしデータを表示する
2. MySQLのソース表からOracle DBのターゲット表
にデータが挿入されました。
1’. または、モデルツリー
のCUST1を右クリックして
データを表示する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
55
Task 2:コード変換とUNION
目標時間:15分
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
56
Task 2:コード変換とUNION
Oracle Database
Task1:
サブシステム(MySQL)に格納されている顧客データ
(MYSQL_CUST表) をDWH(Oracle DB)に連携します。
MySQL
cust1
顧客データ
mysql_cust
M/F
顧客ファイル
FCUST.csv
XR_SEG
(クロスリファレンス表)
Task2:コード
変換とUNION
Task2:
メインフレームから出力された別の顧客ファイルを
マージして一緒に取り込みます。その際、システム
間でセグメントコードが異なるため変換表(クロスリ
ファレンス表)を利用してコードを読替えます。
Task3:
収入区分毎に、複数の顧客表に振り分けます。
その際、1回のSelectで条件に応じて挿入先を
振り分ける Multi Table Insert文を利用します。
Task4:
Hiveテーブルに格納された映画情報
(movieapp_log_odistage)とMySQLにある顧客情報
(mysql_cust)を結合し、地域毎(国、大陸)の売上を
集計します。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
57
マッピングの複製
1. Task2で作成したマッピングを複製し、名前を変更します。
1. 右クリックして
選択の複製
2. 複製したマッピング
(1_My~のコピー)を
ダブルクリックで開く
3.複製したマッピングの
「背景」を選択するか、
「概要」タブに切替えると
名前が変更できる
4. 複製したマッピングをダブルクリックで開き、
2_MySQL_File_to_Oracle に名称を変更する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
58
論理タブ:データストアのDrag&Drop
2. Fileモデルの FCUSTファイル と OracleMovieモデルの XR_SEG表 をDrag&Dropします。
1. FCUSTを
Drag&Drop
2. XR_SEGを
Drag&Drop
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
59
論理タブ:ファイルとコード変換表の結合
3. 「結合」コンポーネントをDrag&Dropします。
「結合」コンポーネントを
Drag&Dropする
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
60
論理タブ:ファイルとコード変換表の結合
4. FCUSTファイルのSEG_XX1列とXR_SEG表(Oracle)のSEG_XX1列を結合(JOIN)コンポーネントを利用して結合します。
1. FCUSTのSEG_XX1列を
JOIN(結合) にDrag&Drop
3. JOIN(結合)コンポーネントをクリック
してプロパティの結合条件を確認
FCUST.SEG_XX1 = XR_SEG.SEG_XX1
2. XX_SEGのSEG_XX1列を
JOIN(結合) にDrag&Drop
「SEG_1~9」 を「 1~9」
に読替える(クロスリ
ファレンス表を参照)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
61
論理タブ:既存マッピングの修正
参考(ダウンストリーム式の保存):
既存のマッピングを編集して、間に追加のロジックを挟
む際などに、項目間のマッピング情報を保持することで、
何度も同様のマッピング定義をし直す手間を省く。
今回は再度、自動マッピングを行うため、マッピング情
報を保持してもしなくてもよい。(図の例ではチェックを
外しているため、保持されない)
5. MYSQL_CUSTからCUST1への接続線を削除します。
1. 接続線を選択して削除する
(DELETEボタンまたは
右クリックで削除メニュー)
2. 「ダウンストリーム式の保存」のチェックを外す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
62
論理タブ:顧客データのマージ(UNION)
6. 集合(SET) コンポーネントをDrag&Dropします。これにより集合演算子(UNION/UNION ALL/MINUS等)が利用できます。
今回は、UNIONを利用して2つの顧客データ(MYSQL_CUST、FCUST)を重複レコードを除外してマージします。
集合(SET)コンポーネント
をDrag&Dropして追加
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
63
参考:顧客データのマージ(UNION)のイメージ
UNIONを利用して構造が同じ表を重複を除外して連結します。
MYSQL_CUST表
MYSQL_CUST表とFCUSTファイル
から共通する項目をSelectし
和集合をとりたい
重複する顧客レコードは排除し
て、1レコードとして入れたい
MYSQL_CUST表
FCUST.csv ファイル
CUST1表
(Oracle)
FCUST.csv
ファイル
顧客ファイル10件のうち、
2件はMySQLの顧客データと重複する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
64
論理タブ:顧客データのマージ(UNION)
7. 集合(SET)コンポーネントとターゲット表(CUST1)を接続し、ターゲット表の属性をもとに集合(SET)コンポーネントの属性
を作成します。
1. 集合(SET)コンポーネントからCUST1に
Drag&Dropで接続を作成する
2. 「ソースでの属性の作成」がチェックされている
ことを確認 (デフォルト)
3. ターゲット表(CUST1)を元に、集合(SET)
コンポーネントに属性が作成されたことを確認
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
65
論理タブ:顧客データのマージ(UNION)
8. MYSQL_CUSTと集合(SET)コンポーネントを接続します。自動マッピングでは 「ターゲットでの属性の作成」のチェックを
外します。
2. INPUT1 となって
いることを確認
1. MYSQL_CUSTと集合(SET)を接続
3. 「ターゲットでの属性の作成」のチェックを外す
4. OKを押す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
66
論理タブ:顧客データのマージ(UNION)
9. MYSQL_CUSTと集合(SET)コンポーネントを接続します。自動マッピングでは 「ターゲットでの属性の作成」のチェックを
外します。
2. INPUT2 となって
いることを確認
1. 結合(JOIN)と
集合(SET)を接続
3. 「ターゲットでの属性の作成」のチェックを外す
4. OKを押す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
67
論理タブ:顧客データのマージ(UNION)
10. 集合(SET)コンポーネントを選択して、プロパティにUNION演算子が設定されていることを確認します。
1. 集合(SET)を選択
3. 入力コネクタ・
ポイントを選択
2. 演算子を選択
4. UNION演算子が選択されてい
ることを確認(デフォルト)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
68
物理タブ:物理設計画面に切替え
11. 「物理」タブをクリックして、物理設計の画面に切替えます。
論理タブ
物理タブ
物理タブに切替える
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
69
物理タブ:Load Knowledge Module(LKM)の選択
12. Fileのロードに用いるLoad Knowledge Module (LKM) を選択します。
Oracle DB(Target)
FILE(Source)
1. FILEからのAccess Pointをクリック
※その他のKM (MySQL側のLKMおよび
ターゲット表へのIKM)はTask2で設定
済みのため、設定は不要です。
3. FileからOracleへのロードなので今回はLKM File to SQL.GLOBAL を選択
2. ロード・ナレッジ・
モジュールを選択
参考:FileからOracleへのロードでは、他にLKM File to
Oracle (EXTERNAL TABLE) や LKM File to Oracle
(SQLLDR) 等のLKMを利用することも可能です。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
70
マッピング処理の実行
13. 作成したマッピング処理を保存し、実行します。
保存(Ctrl+S)
実行
OKを押す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
71
オペレータにてセッションの正常実行を確認
14. オペレータ画面にてセッションが成功したこと(緑のアイコン)を確認します。
2. セッションステータスが
成功(緑)であることを確認する
1. リロード
ボタンを押下
FileとMySQLでソースの実
行ユニットが異なるので
パラレルでロードされる
FileのロードとMySQLから
のロードを待ち合わせて、
ターゲット表への統合処
理を行う
File/MySQLの一時表のク
リーンナップ処理もパラレ
ルで行う
参考:
ソースの実行ユニットがFILEとMySQLで分かれているため、
並行(パラレル)で一時表(C$表)へロードが行われ、その後
待ち合わせて、ターゲット表への統合処理を行います。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
72
セッション実行後のデータを確認
15. マッピング(論理タブ)のターゲットデータストア、またはモデルツリーからデータを表示してみます。
1. マッピングからCUST1のデータを表示
1’. または、モデルツリー
からデータを表示
2. FILEの10レコードのうち、重複を除いた
8件が挿入されたことを確認します
(CUST_IDが1,500,001から1,500,008まで
の8レコード)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
3. セグメントコードが「SEG_1~9」 から
「 1~9」 に読替えられていることを確認
します(クロスリファレンス表)
73
Task 3:条件分岐とMulti Table Insert
目標時間:15分
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
74
Task 3:条件分岐とMulti Table Insert
Oracle Database
Task1:
サブシステム(MySQL)に格納されている顧客データ
(MYSQL_CUST表) をDWH(Oracle DB)に連携します。
MySQL
cust1
顧客データ
mysql_cust
M/F
顧客ファイル
FCUST.csv
XR_SEG
(クロスリファレンス表)
Task3:
分岐
cust2
cust3
Task2:
メインフレームから出力された別の顧客ファイルを
マージして一緒に取り込みます。その際、システム
間でセグメントコードが異なるため変換表(クロスリ
ファレンス表)を利用してコードを読替えます。
Task3:
収入区分毎に、複数の顧客表に振り分けます。
その際、1回のSelectで条件に応じて挿入先を
振り分ける Multi Table Insert文を利用します。
Task4:
Hiveテーブルに格納された映画情報
(movieapp_log_odistage)とMySQLにある顧客情報
(mysql_cust)を結合し、地域毎(国、大陸)の売上を
集計します。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
75
マッピングの複製
1. Task3で作成したマッピング(2_My~)を複製し、名称変更します。
1. 右クリックして
選択の複製
2. 複製したマッピング
(2_My~のコピー)を
ダブルクリックで開く
3.複製したマッピングの
「背景」を選択するか、
「概要」タブに切替えると
名前が変更できる
4. 複製したマッピングをダブルクリックで開き、
3_MySQL_File_to_Oracle_Split に名称を変更する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
76
論理タブ:データストアのDrag&Drop
2. OracleMovieモデルの CUST2表 と CUST3表 をDrag&Dropします。
CUST2, CUST3 をDrag&Drop
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
77
論理タブ:既存マッピングの修正
参考(ダウンストリーム式の保存):
既存のマッピングを編集して、間に追加のロジックを挟
む際などに、項目間のマッピング情報を保持することで、
何度も同様のマッピング定義をし直す手間を省く。
今回は再度、自動マッピングを行うため、マッピング情
報を保持してもしなくてもよい。(図の例ではチェックを
外しているため、保持されない)
3. 集合(SET)コンポーネントからCUST1への接続線を削除します。
1. 接続線を選択して削除する
(DELETEボタンまたは
右クリックで削除メニュー)
2. 「ダウンストリーム式の保存」のチェックを外す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
78
論理タブ:条件分岐
4. 収入区分毎に顧客データを振り分けるため、分割(Split)コンポーネントをDrag&Dropします。
分割(Split)コンポーネントを
Drag&Dropする
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
79
論理タブ:条件分岐
5. 集合(SET)コンポーネントと分割(Split)コンポーネントを接続します。
集合(SET)コンポーネントの出力から
分割(Split)コンポーネントの入力に接続する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
80
論理タブ:条件分岐
6. 分割(Split)コンポーネントとCUST1、CUST2を接続します。
分割(SPLIT)とCUST1, CUST2を
つなぐ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
81
論理タブ:条件分岐
7. 分割(Split)コンポーネントとCUST3を接続します。
2. <新規>を選択され
ていることを確認
1. 分割(SPLIT)とCUST3
をつなぐ
3. 自動マッピングされなかった属性(グレー表示
になっていない)は、後ほど手動でマッピングする
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
82
論理タブ:条件分岐
8. 集合(SET)コンポーネントのLAST_NAME列とFIRST_NAME列をCUST3のNAME列に文字列結合します。
4. 集合(SET)のFIRST_NAME列
をCUST3のNAMEのプロパティ
の式欄にDrag&Drop
2. CUST3の
NAME列を
選択
1. 集合(SET)のLAST_NAME列を
CUST3のNAMEにDrag&Drop
3. プロパティ
の式欄にて
LAST_NAME
がマップされ
たことを確認
3. パイプ(||) を記入
(concat関数でもよい)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
83
3. CASE式を利用して、COUNTRY列の値がJapanか否かで0 or 1に変換
case
when SET_.COUNTRY='Japan' then ‘0'
else ‘1'
end
論理タブ:条件分岐
9. CUST3のDOMESTIC列にはCOUNTRY列の値が’Japan’か否か
によって、’0’ または ’1’ に値を変換して入力します。
※列名はTypoを避けるため列リストからDrag&Drop(またはダブルクリック)
※クォーテーション(‘)は半角。全角とならないよう注意
※Japan は大文字/小文字を注意
※行末にセミコロン(;)などは不要
※end を忘れない
1. CUST3のDOMESTIC列を選択
2. 複雑な編集を行う場合は、
式拡張エディタを利用する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
84
論理タブ:条件分岐
10. 分割(SPLIT)コンポーネントを選択し、顧客データの収入区分毎に分割条件を設定します。
参考:顧客データの収入区分
1. 分割(SPLIT)を選択
3. 出力コネクタ・
ポイントを選択
2. 分割条件を選択
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
分岐条件:
E, F はCUST1に挿入
C, D はCUST2に挿入
それ以外(A,B)はCUST3に挿入
85
スプリッタ条件:
substr(SET_.INCOME_LEVEL,1,1) in (‘E’,’F’) CUST1
substr(SET_.INCOME_LEVEL,1,1) in (‘C’,’D’)  CUST2
剰余 (else)
CUST3
論理タブ:条件分岐
11. 分割(SPLIT)コンポーネントを選択し、顧客データの収入区分毎に分割条件を設定します。
INCOME_LEVELの1文字目の値(SUBSTR関数で取得)に応じて出力先を条件分岐します。
分割(SPLIT)コンポーネントのプロパティ
1. フィールドの右端を押すとエディタが起動する
2. OUTPUT1と2にスプリッタ条件を入力
SUBSTR(文字列 , 開始位置 , 文字数 )
 文字列 の開始位置 から文字数分の
文字を返します
3. OUTPUT3は「剰余(ELSE)」にチェックを入れる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
86
物理タブ:物理設計画面に切替え
12. 「物理」タブをクリックして、物理設計の画面に切替えます。
論理タブ
物理タブ
物理タブに切替える
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
87
物理タブ:Multi Table Insert文の利用 (IKMの選択)
13. ターゲットデータストア(CUST1, CUST2, CUST3)で、Multi Table Insert文用のIKM (IKM Oracle Multi-insert)を選択します。
3. 今回はOracleのMulti Table Insert文を利用する
IKM Oracle Multi-insert.GLOBAL を選択
2. 統合ナレッジ・
モジュールを選択
1. ターゲットデータストアを選択してIKMを設定する
4. KMの実行オプション
TRUNCATE_TARGET_TABLEを Trueに設定する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
88
マッピング処理の実行
14. 作成したマッピング処理を保存し、実行します。
保存(Ctrl+S)
実行
OKを押す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
89
オペレータにてセッションの正常実行を確認
15. オペレータ画面にて実行状況/結果を確認します。Multi Table Insert文が発行されていることを確認します。
1. リロードボタンを押下
2. 正常終了を確認
参考:Multi Table Insert文により、条件(収入区分)に応じて、別々の表に挿入している
INSERT ALL
WHEN substr(INCOME_LEVEL,1,1) in('E','F') THEN
INTO MOVIEDEMO.CUST1 (CUST_ID , …. ) VALUES (CUST_ID , …. )
WHEN substr(INCOME_LEVEL,1,1) in('C','D') THEN
INTO MOVIEDEMO.CUST2 (CUST_ID , ….) VALUES (CUST_ID , ….)
WHEN NOT((substr(INCOME_LEVEL,1,1) in('E','F')) OR(substr(INCOME_LEVEL,1,1) in('C','D'))) THEN
INTO MOVIEDEMO.CUST3 (CUST_ID , ….) VALUES (CUST_ID , ….)
SELECT SET_.CUST_ID CUST_ID , …
FROM
(
SELECT MYSQL_CUST_A.CUST_ID CUST_ID , … FROM ODI_TMP.C$_1MYSQL_CUST MYSQL_CUST_A
UNION
SELECT FCUST_A.CUST_ID CUST_ID , … FROM ODI_TMP.C$_0FCUST FCUST_A , MOVIEDEMO.XR_SEG
XR_SEG WHERE (FCUST_A.SEG_XX1 = XR_SEG.SEG_XX1)
) SET_
参考:ソースに対するSelectは1回(今回はMySQLとFILEの顧客データをUNIONしている)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
90
セッション実行後のデータを確認
16. マッピング(論理タブ)のターゲットデータストア、またはモデルツリーからデータを表示してみます。
CUST1
INCOME_LEVELが
EとFの顧客のみ
CUST2
INCOME_LEVELが
CとDの顧客のみ
CUST3
INCOME_LEVELが
AとBの顧客のみ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
91
Task 4:Oracle Big Data SQLによるロードと集計
目標時間:10分
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
92
Task 4:Oracle Big Data SQLによるロードと集計
Oracle Database
Task1:
サブシステム(MySQL)に格納されている顧客データ
(MYSQL_CUST表) をDWH(Oracle DB)に連携します。
MySQL
Task2:
メインフレームから出力された別の顧客ファイルを
マージして一緒に取り込みます。その際、システム
間でセグメントコードが異なるため変換表(クロスリ
ファレンス表)を利用してコードを読替えます。
顧客データ
mysql_cust
Hadoop Hive
フィルタ
activity=11
(販売活動)
movieapp_log_odistage
結合
CUST_ID
Task 4:Oracle Big Data
SQLを用いてロード
ctry_sales
売上
集計
Task3:
収入区分毎に、複数の顧客表に振り分けます。
その際、1回のSelectで条件に応じて挿入先を
振り分ける Multi Table Insert文を利用します。
Task4:
Hiveテーブルに格納された映画情報
(movieapp_log_odistage)とMySQLにある顧客情報
(mysql_cust)を結合し、地域毎(国、大陸)の売上を
集計します。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
93
マッピングの作成
1. プロジェクト(Big Data Hands-On Lab) のフォルダ(First Folder) に新規でマッピングを作成します。
2. マッピングに名前を付ける
4_CalcSales_BigDataSQL
1. Big Data Hands-On Lab --> First Folder
--> マッピング とたどり、右クリックで新規
マッピングを追加する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
94
論理タブ:データストアのDrag&Drop
2. HiveMovieモデルのmovieapp_log_odistage表とMySQLモデルのMYSQL_CUST表と
OracleMovieモデルのODI_COUNTRY_SALES表(別名CTRY_SALES) をDrag&Dropします。
movieapp_log_odistage
をDrag&Drop
※ODI_COUNTRY_SALES表は
データストアの設定にて
異なる「別名」が設定されてい
るためダイアグラム上は
CTRY_SALES という名称で表示
されています。
MYSQL_CUST
をDrag&Drop
ODI_COUNTRY_SALES
をDrag&Drop
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
95
論理タブ:フィルタ(FILTER)の追加
3. フィルタ(FILTER)コンポーネントを追加し、movieapp_log_odisgate表のactivity列をDrag&Dropします。
FILTERコンポーネントを選択し、プロパティにて条件を設定します。売上の集計なので、販売に関わるactivityのみ
に条件を絞り込みます。 (activity=‘11’ 販売活動)
3. 販売活動に関するレコードだけを絞り込む
movieapp_log_odistage.activity='11'
1. FILTER
を追加
2. movieapp_log_odistage表
のactivity列をFILTERに
Drag&Drop
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
96
論理タブ:結合(JOIN)の追加
4. 結合(JOIN)コンポーネントを使用して、movieapp_log_odisgate表のcustid列とMYSQL_CUST表のCUST_IDを結合します。
2. custidをJOINに
Drag&Drop
JOINのプロパティ
4. 結合条件を確認
movieapp_log_odistage.custid = MYSQL_CUST.CUST_ID
1. 結合(JOIN)
を追加
3. CUST_IDをJOIN
にDrag&Drop
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
97
論理タブ:集計(AGGREGATE)の追加
5. 集計(AGGREGATE)コンポーネントを追加し、CTRY_SALESとつなぎます。
2. 集計(AGGREGATE)
とCTRY_SALESを接続
1. 集計(AGGREGATE)
コンポーネントを追加
3. 「ソースでの属性の作成」に
チェックを入れる。
今回は、ターゲット表と同じ属性
で集計を行う。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
98
論理タブ:条件分岐
6. 結合(JOIN) と集計(AGGREGATE)コンポーネント を接続します。
1. 結合(JOIN)と集計
(AGGREGATE) を接続
2. 「ターゲットでの属性の作成」
のチェックを外す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
99
論理タブ:条件分岐
7. 集計(AGGREGATE)コンポーネントのTOTAL_SALES列において、 movieapp_log_odistageのSALES列にSUM関数を利用し
て売上を集計します。
1. 集計(AGGREGATE) の
TOTAL_SALES列を選択
2. TOTAL_SALES列のプロパティの式欄
にmovieapp_log_odistageのSALES列を
Drag&Dropする
3. SUM関数を利用して売上を集計
sum(movieapp_log_odistage.sales)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
100
参考:GROUP BYの設定
集計(AGGREGATE)コンポーネントでは、デフォルトでは集計関数(SUM等)を設定していない列でGROUP BYして集計が行
われます。また明示的にGROUP BY列やHAVING句を設定することも可能です。
明示的に、GROUP BY列やHAVING句
等を設定することも可能
デフォルトでは、グループ化基準が「自動」に設定され、
集計関数(SUM等)を未使用の列でGROUP BYされ集計される
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
101
物理タブ:物理設計画面に切替え
8. 「物理」タブをクリックして、物理設計の画面に切替えます。
論理タブ
物理タブ
物理タブに切替える
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
102
物理タブ:Oracle Big Data SQLの利用 (LKMの選択)
9. HiveからOracle DBへのロードにLKM Hive to Oracle (Big Data)を選択します。このLKMはリモートのOracle DBからHive
テーブルに外部表(ファイルをマウントしOracle DBテーブルのように見せる機能)を通じて高速にアクセスします。
MySQLからのAccess Point
1. Access Pointを選択
2. ロード・ナレッジ・
モジュールを選択
3. LKM SQL to SQL (Built-in).GLOBAL を選択
HiveからのAccess Point
3. LKM Hive to Oracle (Big Data).GLOBAL を選択
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
103
物理タブ:Oracle Big Data SQLの利用 (LKMの選択)
10. ターゲット・データストアを選択し、Integration Knowledge Module (IKM) を選択します。
3. 今回はOracleへの挿入なので、
IKM Oracle Insert.GLOBAL を選択
1. ターゲット・データストアをクリック
2. 統合ナレッジ・モ
ジュールを選択
4. KMの実行オプション
TRUNCATE_TARGET_TABLEをTrueに設定
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
104
マッピング処理の実行
11. 作成したマッピング処理を保存し、実行します。
保存(Ctrl+S)
実行
OKを押す
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
105
オペレータにてセッションの正常実行を確認
12. オペレータ画面にて実行状況/結果を確認します。Hiveテーブルに対して外部表(C$表)を定義し、直接Insert Select
を行っていることが確認できます。
1. リロードボタンを押下
2. 正常終了を確認
参考:外部表(C$)として定義されたHiveテーブル。
通常はステージング表(C$)へのロードとターゲッ
ト表への統合処理の2ステップが必要だが、1ス
テップでロードと同時にOracleの関数等を利用し
て加工処理ができる
参考:Hiveテーブル
に外部表(C$)を定義
参考:外部表越しにHiveテーブルをソースとしてInsert Selectを行っている
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
106
セッション実行後のデータを確認
13. マッピング(論理タブ)のターゲットデータストア、またはモデルツリーからデータを表示してみます。
国、大陸毎に売上が
集計されたことを確認
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
107
まとめ ハンズオン・シナリオの全体 (再掲)
Oracle Database
Task1:
サブシステム(MySQL)に格納されている顧客データ
(MYSQL_CUST表) をDWH(Oracle DB)に連携します。
MySQL
Task1:MySQLからOracleへの連携
cust1
XR_SEG
cust2
顧客データ
mysql_cust
M/F
顧客ファイル
FCUST.csv
Hadoop Hive
フィルタ
activity=11
(販売活動)
movieapp_log_odistage
(クロスリファレンス表)
Task3:
分岐
cust3
Task2:コード
変換とUNION
結合
CUST_ID
Task 4:Oracle Big Data
SQLを用いてロード
ctry_sales
売上
集計
Task2:
メインフレームから出力された別の顧客ファイルを
マージして一緒に取り込みます。その際、システム
間でセグメントコードが異なるため変換表(クロスリ
ファレンス表)を利用してコードを読替えます。
Task3:
収入区分毎に、複数の顧客表に振り分けます。
その際、1回のSelectで条件に応じて挿入先を
振り分ける Multi Table Insert文を利用します。
Task4:
Hiveテーブルに格納された映画情報
(movieapp_log_odistage)とMySQLにある顧客情報
(mysql_cust)を結合し、地域毎(国、大陸)の売上を
集計します。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
108
まとめ
• 本セッションでは、マッピング機能を中心に、フィルタ/結合/集合演算(UNION)/ 分岐/
集計などの処理を行い、操作イメージを体験しました。
• ハンズオンのシナリオを通じて、Oracle DB/File/MySQL/Big Dataなど多様なデータソー
ス間の連携において、共通的なGUI操作で設計開発を行いました。
今後理解を深めていただくとよいテーマ
– ジョブフロー、ジョブネット機能 (パッケージ、ロード計画)
– 共通部品化 (再使用可能マッピング、パッケージのひな形化、変数 etc.)
– 外部ジョブコントローラー (JP1、Tivoli等) との連携方法
– 定義情報のリリース方法 (開発環境から本番環境へ)
– 柔軟なカスタマイズ方法 (KMのカスタマイズ、プロシージャ、Jython、Java etc.)
– Java SDK API による開発/運用の効率化/自動化
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
109
参考:ハンズオン環境 Oracle Big Data Lite Virtual Machine
• 本ハンズオンではOracle Technology Network (OTN)
にて公開中のOracle Big Data Lite VM を日本語化した
イメージを利用しました。
–
http://www.oracle.com/technetwork/database/bigdata-appliance/oracle-bigdatalite2104726.html
–
https://blogs.oracle.com/dataintegration/entry/oracle_goldengate_and_oracle_data
• ハンズオンのシナリオは、本セッションのために新規で
追加したシナリオを用いました。
• Oracle Big Data Lite VM Version 4.0.1には以下のコン
ポーネントを含みますが、テスト/教育目的に提供され
るものであり、本番での利用を想定したものではなく、
非サポートである旨ご理解ください。
Oracle Enterprise Linux 6.4
Oracle Database 12c R1 EE (12.1.0.2) - including Oracle Big Data SQL-enabled external tables
Cloudera Distribution including Apache Hadoop (CDH5.1.2) / Cloudera Manager (5.1.2)
Oracle Big Data Connectors 4.0 (Oracle SQL Connector for HDFS 3.1.0/Oracle Loader for
Hadoop 3.2.0 / Oracle Data Integrator 12c /Oracle R Advanced Analytics for Hadoop 2.4.1 /
Oracle XQuery for Hadoop 4.0.1)
Oracle NoSQL Database Enterprise Edition 12cR1 (3.0.14)
Oracle JDeveloper 12c (12.1.3) / Oracle SQL Developer and Data Modeler 4.0.3
Oracle Data Integrator 12cR1 (12.1.3) / Oracle GoldenGate 12c
Oracle R Distribution 3.1.1 / Oracle Perfect Balance 2.2
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
110
オリジナル・シナリオ
本セッションのための追加シナリオ
参考:Architecture Overview
Oracle Database
Hadoop
movie_raiting
Logs
HDFS file
Activity
Hive ext. table
Activity
3. Hive Map
Avg. Movie
Rating
mysql_cust
6. OGG Load
ctry_sales
Hive
movie_raiting
2.Sqoop Map
movie
4. Big Data SQL
Hive
movie
Task4:Big Data SQL
によるロードと 集計
1. Topology
and Models
5. ODI
Package
Hive
movie_app_log
Task3:
分岐
MySQL
Task0:トポロジとモデルの確認/追加
cust2
xr_seg
Task2:コード
変換とUNION
Task1:MySQLからOracleへの連携
cust1
cust3
FCUST.csv
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
111
reservoir
【名】
1.
〔液体などを入れておく〕容器、タンク
2.
貯め池、貯水池、貯留層
3.
〔大量の情報・知識などの〕蓄積、宝庫
発音 : rézərvwɑ̀ːr (リザブワァ、リザブワー)
参考:Big Dataのトレンドの1つ “Reservoir”
Data Reservoir Use Case with Oracle Data Integration
High Level Pattern #1:
pre-processing platformとしてのHadoop
1.Data Staging & Preparation
Hadoop
Sqoop
Initial Load
2.Detailed, Deep Data
DWH(サマリ)の透過的な拡張先として
大量の明細/履歴データのバックアップ先
(transparent backend expansion)
としてのHadoop
Sqoop Load
CDC to HDFS, Hive,
Flume, HBase
DW
High Level Pattern #2:
Oracle Data
Integrator
Oracle
GoldenGate
Social
Media
Logs
File Load
Hive
Pig
SQL
Data Warehouses,
DataMarts
HDFS
Spark
Impara HBase
Oozie
OLH / OSCH
SQL
Big Data SQL
Hadoop
Sensor Data
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
112
参考情報
• 製品マニュアル (ODI Studioのヘルプ機能も活用ください)
– ODI 12.1.3 一覧 (英語)
http://docs.oracle.com/middleware/1213/odi/docs.htm
– ODI 12.1.2 一覧 (日本語)
•
•
•
•
•
•
•
http://docs.oracle.com/cd/E50629_01/odi/docs.htm
OTN ODIページ(US) http://www.oracle.com/technetwork/middleware/data-integrator/overview/index.html
OTN ODIページ(JP) –お役立ち情報 http://www.oracle.com/technetwork/jp/middleware/data-integrator/learnmore/index.html
Data Integration Blog (開発部門やProduct Managementが最新情報を投稿!) https://blogs.oracle.com/dataintegration/
A-Team Blog (Architecture Teamが有益なTipsを公開!) http://www.ateam-oracle.com/?cat=64
ODI Code Samples (ODIのカスタムKM等のシェアサイト) https://java.net/projects/oracledi
Oracle By Examples(OBE) https://apex.oracle.com/pls/apex/f?p=44785:141:0::::P141_PAGE_ID,P141_SECTION_ID:178,1317
Oracle Big Data Lite Virtual Machine http://www.oracle.com/technetwork/database/bigdata-appliance/oracle-bigdatalite-2104726.html
– ODI/OGGシナリオのBlog記事 https://blogs.oracle.com/dataintegration/entry/oracle_goldengate_and_oracle_data
– ODI/OGGハンズオンシナリオ
http://www.oracle.com/webfolder/technetwork/odi/ODI_BigData_HOL.pdf
– ODI/OGGデモ http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/odi/odi_12c/DI_BDL_Guide/BigDataIntegration_Demo.html?cid=10235&ssid=0
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
113
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
114
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |