#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. |
© Copyright 2024 ExpyDoc