データの変換は、抽出、変換およびロード(ETL)ツールの主要な機能の1つです。この章では、Warehouse Builderを使用したデータ変換の概要について説明します。
この章の内容は次のとおりです。
ソース・データをインポートしてターゲットを定義した後で、ソース・データをターゲットに必要な出力に変換する方法を検討します。Warehouse Builderでは、マッピング・エディタでマッピングを設計し、データの変換方法を指定します。マッピングはWarehouse Builderのエンティティで、ソースからデータを抽出して変換し、1つ以上のターゲットにロードする一連の操作が記述されています。
マッピングを設計する際の基本単位は演算子です。マッピングで実行する各操作を演算子で記述します。操作の順序を指定するには、マッピングにデータ・フロー接続を接続します。
マッピングでデータ変換を指定するには、事前作成済の多くの変換演算子から演算子を選択するか、新しい変換演算子を設計します。事前作成済の変換演算子を使用する場合、フィルタ処理、結合、ソートなど、よく実行する操作を実行できます。Warehouse Builderには、データのマージ、クレンジング、プロファイリングなどの複雑な操作のための事前作成済の演算子も用意されています。
事前作成済の変換演算子の中に要件を満たす演算子がない場合、新しい演算子を設計できます。PL/SQLファンクション、プロシージャ、パッケージ・ファンクションおよびパッケージ・プロシージャのOracleデータベース・ライブラリに基づいて新しい変換演算子を作成できます。
抽出およびロードの操作は、数多くのソースおよびターゲットの演算子によって表されます。表演算子は表を表し、フラット・ファイル演算子はフラット・ファイルを表します。その演算子が抽出とロードのどちらの操作を示すかは、マッピングにおいてその演算子を他の演算子とどのように結合するかによって決まります。
重要な点は、マッピング内の演算子とそれが表すオブジェクトの相違です。演算子とオブジェクトは、2つをバインドするまでは別個のエンティティです。たとえば、表演算子をマッピングに追加すると、その演算子をリポジトリの特定の表にバインドできます。演算子を表にバインドすると、2つの定義の変更を同期化できます。表演算子がターゲットを表している場合、マッピング内の演算子を変更すると、これらの変更をリポジトリ内の表に反映できます。演算子がメタデータ定義の変更元であるソースを表している場合、デザイン・センターに表を再インポートすると、マッピング・エディタで表演算子に対する変更を伝播できます。
マッピングとはデータをソースから抽出し、変換してターゲットにロードする一連の操作を表します。これによりデータ・フローおよびデータで実行される操作がビジュアル表示されます。マッピングをWarehouse Builderで設計する場合は、マッピング・エディタ・インタフェースを使用します。
または、Oracle Warehouse Builder APIおよびスクリプト・リファレンスの説明に従って、Warehouse Builderのスクリプト・インタフェースであるOMB Plusを使用してマッピングを作成および定義することもできます。
マッピングで定義したETLロジックに基づいて、Warehouse Builderにより設計の実装に必要なコードが生成されます。Warehouse Builderでは次の言語のコードを生成できます。
PL/SQL: PL/SQLは、Procedural Language/Standard Query Languageの略語です。手続き型言語で使用される構成概念を追加することでSQLを拡張した、SQLよりも強力な構造化言語です。
SQL*Loader: SQL*Loaderは、ファイルからOracleのデータベース表にデータをロードするためのOracleツールです。SQL*Loaderはフラット・ファイルから大量のデータをロードする最も効率的な手段です。
ABAP: ABAPは、SAP R/3システム(ビジネス・アプリケーション・サブシステム)のアプリケーションを開発するためのプログラミング言語です。
マッピングの基本となる設計要素は演算子です。演算子を使用して、データ・フローでソースおよびターゲットを表現します。また、演算子を使用して、ソースからターゲットへのデータの変換方法を定義することもできます。ソースとして選択する演算子は、マッピングの設計方法に影響を与えます。Warehouse Builderでは、選択された演算子に基づいて、次のいずれかのマッピング生成言語にマッピングが割り当てられます。
PL/SQL
SQL*Loader
ABAP
各コード言語では、マッピングを設計する際、特定のルールに従う必要があります。
PL/SQLマッピング: フラット・ファイル演算子がソースまたはSAP/R3ソースとして指定されていないすべてのマッピングでは、Warehouse BuilderによりPL/SQLコードが生成されます。PL/SQLマッピングの設計上の考慮事項は、指定するオペレーティング・モード(行ベースまたはセット・ベース)によって異なります。詳細は、「パフォーマンスおよび拡張ETL概念の理解」を参照してください。
SQL*Loaderマッピング: フラット・ファイル演算子をソースとして定義すると、Warehouse BuilderによりSQL*Loaderコードが生成されます。SQL*Loaderマッピングを正しく設計するには、「フラット・ファイル・ソース演算子」に記載されているガイドラインに従ってください。
ABAPマッピング: SAP/R3ソースを定義すると、Warehouse BuilderによりABAPコードが生成されます。SAPソースに対するマッピングの設計上の考慮事項は、第7章「SAPアプリケーションからのデータの取得」を参照してください。
マッピングを設計するときは、マッピング・エディタ・パレットから演算子を選択し、キャンバスにドラッグできます。
ここでは、演算子のタイプを紹介し、演算子についてこのマニュアルに記載されている詳細な情報の参照先(章)を示します。
Oracleソース/ターゲット演算子: これらの演算子は、マッピングでOracleデータベース・オブジェクトを示します。フラット・ファイルのソース演算子とターゲット演算子もこの分類に含まれます。
リモートおよびOracle以外のソースおよびターゲット演算子: これらの演算子の使用には特別な要件があります。「リモートおよびOracle以外のソースおよびターゲット演算子の使用」を参照してください。
データ・フロー演算子: データ・フロー演算子はデータを変換します。
事前/事後処理演算子: マッピングを実行する前または後にファンクションまたはプロシージャをコールします。
プラッガブル・マッピング演算子: これらは他のマッピングで演算子として機能するマッピングです。
リレーショナル・データベース・オブジェクトおよびフラット・ファイルオブジェクトを表すには、ソース演算子およびターゲット演算子を使用します。
表15-1に、ソース演算子とターゲット演算子のアルファベット順のリストと簡単な説明を示します。
表15-1 ソース演算子とターゲット演算子
アイコン | 演算子 | 説明 |
---|---|---|
![]() |
定数演算子 |
1つの出力グループが作成されます。このグループには、1つ以上の定数属性を指定できます。 |
![]() |
オブジェクト演算子の構成 |
オブジェクト・タイプおよびコレクション・タイプを作成します。 |
![]() |
キューブ演算子 |
定義済のキューブを表します。 |
![]() |
データ・ジェネレータ演算子 |
レコード番号、システムの日付、順序の値などの情報を表示します。 |
![]() |
ディメンション演算子 |
定義済のディメンションを表します。 |
![]() |
オブジェクト演算子の拡張 |
オブジェクト・タイプを構成する個々の属性を取得するために、オブジェクト・タイプを拡張します。 |
![]() |
外部表演算子 |
定義済またはインポート済の外部表を表します。 |
![]() |
フラット・ファイル演算子 |
定義済またはインポート済のフラット・ファイルを表します。 |
![]() |
マテリアライズド・ビュー演算子 |
定義済のマテリアライズド・ビューを表します。 |
![]() |
順序演算子 |
1行ごとに増分する連続番号を生成します。 |
![]() |
表演算子 |
定義済またはインポート済の表を表します。 |
![]() |
可変長配列イテレータ演算子 |
表タイプで値を反復します。 |
![]() |
ビュー演算子 |
定義済またはインポート済のビューを表します。 |
マッピングのデータを変換するには、データ・フロー演算子を使用します。
表15-2に、各データ・フロー演算子のアルファベット順のリストと簡単な説明を示します。変換演算子の詳細は、「データ・フロー演算子」を参照してください。
表15-2 データ・フロー演算子
アイコン | 演算子 | 説明 |
---|---|---|
![]() |
アグリゲータ演算子 |
SUMやAVGなどのデータ集計を実行し、集計されたデータを使用して行セットを出力します。 |
![]() |
Anydataキャスト演算子 |
Sys.AnyDataタイプのオブジェクトを主タイプまたはユーザー定義タイプに変換します。 |
![]() |
デュプリケータ解除演算子 |
マッピングで生成されたSELECTコードにDISTINCT句を挿入して、ソース内の重複するデータを削除します。 |
![]() |
式演算子 |
この演算子の1つの出力パラメータについて、非プロシージャ・アルゴリズムを定義するSQL式を記述できます。式では、入力パラメータ名、変数名およびライブラリ・ファンクションの組合せを使用できます。 |
![]() |
フィルタ演算子 |
行セットの行を特定の条件に基づいてフィルタリングします。 |
![]() |
ジョイナ演算子 |
カーディナリティの異なる複数のソースから取り込んだ複数の行セットを結合し、1つの出力行セットを生成します。 |
![]() |
キー参照演算子 |
表、ビュー、キューブ、ディメンションなどの参照オブジェクトからデータを参照します。 |
![]() |
Match-Merge演算子 |
データ品質に関する演算子で、一致するレコードを識別して単一のレコードにマージします。 |
![]() |
Name and Address演算子 |
Name and Addressソース・データのエラーや不整合を識別して修正します。 |
![]() |
ピボット演算子 |
複数の属性の単一行を複数の行に変換します。複数の行ではなく、複数の属性間に含まれるデータを変換する場合に、この演算子を使用します。 |
![]() |
集合演算演算子 |
マッピングで、UNION、UNION ALL、INTERSECTおよびMINUSの演算を実行します。 |
![]() |
ソーター演算子 |
属性を昇順または降順にソートします。 |
![]() |
スプリッタ演算子 |
ブール分割条件を使用して、単一の入力行セットを複数の出力行セットに分割します。 |
![]() |
テーブル・ファンクション演算子 |
カスタム・コードを開発して入力行セットを操作し、カーディナリティが同じまたは異なる、物理表のように問合せ可能な出力行セットを戻すことができます。 テーブル・ファンクション演算子をターゲットとして使用できます。 |
![]() |
変換演算子 |
PL/SQLファンクションまたはプロシージャを使用して、行セット内の行の属性値データを変換します。 |
![]() |
アンピボット演算子 |
複数の入力行を1つの出力行に変換します。これにより、ソース・データ内の属性ごとにグループ化されているソース行セットからソースをいったん抽出し、そこから単一の行を作成できます。 |
マッピングの実行前または後に処理を実行するには、事前/事後処理演算子を使用します。マッピングに対する値を指定するには、マッピング・パラメータ演算子を使用します。
表15-3に、事前/事後処理演算子とマッピング・パラメータ演算子を示します。
変換とは、データの変換を可能にするPL/SQLファンクション、プロシージャ、パッケージおよびタイプです。変換は、ETLプロセスを定義するマッピングとプロセス・フローを設計する場合に使用します。
変換は、Warehouse Builderワークスペースに格納され、定義したプロジェクトで使用できます。
変換パッケージの配布はパッケージ・レベルで行われますが、実行は変換レベルです。
Warehouse Builderでの変換は、次のように分類できます。
次の各項では、これらのタイプの変換について詳細に説明します。
Warehouse Builderには、標準的な変換操作を実行できる一連の事前定義済変換が用意されています。事前定義済変換は、組込みおよびシードされたファンクションとプロシージャで構成されているOracleライブラリに含まれています。データの変換には、これらの事前定義済変換を直接使用できます。Oracleライブラリの詳細は、「変換ライブラリのタイプ」を参照してください。
事前定義済変換は、次のカテゴリに編成されています。
管理
文字
コントロール・センター
変換
日付
数値
OLAP
その他
SYS
空間
ストリーム
XML
各カテゴリに属する変換の詳細は、「Oracle Warehouse Builderの変換」を参照してください。
カスタム変換はユーザーが作成する変換です。カスタム変換では、定義の一部に事前定義済変換を使用できます。
カスタム変換には、次のカテゴリが含まれます。
ファンクション: ファンクション・カテゴリにはスタンドアロン、ファンクションが含まれます。このカテゴリはグローバル・エクスプローラにある「パブリック変換」ノードの「カスタム」ノードで使用可能です。また、これはプロジェクト・エクスプローラにあるすべてのOracleモジュールの「変換」ノードに自動的に作成されます。
ファンクションはユーザーが定義するか、データベースからインポートできます。ファンクション変換の入力パラメータは0からnで、結果値が生成されます。
プロシージャ: プロシージャ・カテゴリには、変換に使用されたあらゆるスタンドアロンのプロシージャが含まれます。このカテゴリは、グローバル・エクスプローラにある「パブリック変換」ノードの「カスタム」ノードで使用可能です。また、グローバル・エクスプローラの各Oracleモジュールの「変換」ノードでも自動的に作成されます。
プロシージャはユーザーが定義するか、データベースからインポートできます。プロシージャ変換の入力パラメータは0からnで、0からnの出力パラメータが生成されます。
パッケージ: パッケージ・カテゴリにはパッケージが含まれており、パッケージはファンクション、プロシージャおよびPL/SQL型を含みます。このカテゴリは、グローバル・エクスプローラの「パブリック変換」ノードの「カスタム」ノードで使用可能です。また、グローバル・エクスプローラの各Oracleモジュールの「変換」ノードでも自動的に作成されます。
PL/SQLパッケージは、Warehouse Builderで作成するか、Warehouse Builderにインポートすることができます。パッケージ本体は変更可能です。ファンクションまたはプロシージャのシグネチャとなるパッケージ・ヘッダーは変更できません。
PL/SQLタイプ: PL/SQLタイプ・カテゴリには、あらゆるスタンドアロンのPL/SQLタイプが含まれています。たとえば、PL/SQLレコード・タイプ、REFカーソル・タイプ、ネストした表のタイプなどです。PL/SQLタイプ・カテゴリは、プロジェクト・エクスプローラの「変換」ノードにある「パッケージ」ノードを使用して定義した各パッケージに自動的に作成されます。また、グローバル・エクスプローラのパス(「パブリック変換」→「カスタム」→「パッケージ」)に定義した各パッケージの下にもあります。
手順の詳細は、「カスタム変換の定義」を参照してください。
前述のカテゴリに加えて、PL/SQLパッケージもインポートできます。インポートしたパッケージのパッケージ本体は変更できますが、ファンクションまたはプロシージャのシグネチャとなるパッケージ・ヘッダーは変更できません。詳細は、「PL/SQLのインポート」を参照してください。
変換ライブラリは、再利用可能な一連の変換で構成されています。リポジトリを作成するたびに、Warehouse Builderでは、該当するプロジェクトに対する変換操作を含む変換ライブラリが作成されます。このライブラリには、標準的なOracleライブラリ、およびプロジェクト内で定義された各Oracleモジュールの追加ライブラリが含まれます。
変換ライブラリは、デザイン・センターにある「グローバル・エクスプローラ」の「パブリック変換」ノードの下にあります。
変換ライブラリは、次のように分類できます。
事前定義済のファンクションの集まりで、このライブラリからグローバル共有ライブラリのプロシージャを定義できます。Oracleライブラリはグローバル・エクスプローラに含まれます。「パブリック変換」ノードの下の「事前定義済」ノードを開きます。事前定義済変換の各カテゴリは、個別のノードとして表されます。カテゴリのノードを開いて、そのカテゴリの事前定義済変換を表示します。たとえば、「文字」ノードを開いて、Oracleライブラリに格納されている事前定義済の文字変換を表示します。
ユーザーが作成した再利用可能な変換の集合です。これらの変換は、ワークスペース内に定義されたファンクション、プロシージャおよびパッケージとして分類されます。
グローバル共有ライブラリ内の変換は、「パブリック変換」ノードの「カスタム」ノードにあります。このノードに作成したすべての変換は、ワークスペース内のすべてのプロジェクトで使用できます。グローバル共有ライブラリに変換を作成する方法の詳細は、「カスタム変換の定義」を参照してください。
グローバル共有ライブラリに定義した変換を配布すると、その変換は、デフォルトのコントロール・センターに関連付けられたロケーションに配布されます。
変換はETLプロセスの様々な場所で使用できるため、Warehouse Builderを使用すると、デザイン・センターの様々な場所から変換ライブラリにアクセスできます。
変換ライブラリには、次の方法でアクセスできます。
式ビルダー
マッピングを作成するときは、ソース・データを変換する式の作成が必要になる場合があります。式ビルダー・インタフェースを使用すると、データの変換に必要な式を作成できます。式には変換を含めることができるため、Warehouse Builderを使用して、式ビルダーから変換ライブラリにアクセスできます。
変換ライブラリは、式ビルダーの「変換」タブで使用できます。TRANSFORMLIBSの下にある「プライベート」ノードには、現行のプロジェクトのみで使用できる変換が含まれます。これらの変換は、Oracleモジュールの「変換」ノードの下に作成されます。「パブリック」ノードには、グローバル共有ライブラリのカスタム変換、およびOracleライブラリの事前定義済変換が含まれます。
「変換演算子の追加」ダイアログ・ボックス
マッピング・エディタの変換演算子を使用すると、Oracleライブラリとグローバル共有ライブラリの両方の変換をマッピングに追加できます。この演算子は、マッピングの一部としてデータを変換する場合に使用できます。
ファンクションの作成ウィザード、プロシージャの作成ウィザード、「ファンクションの編集」ダイアログ・ボックスまたは「プロシージャの編集」ダイアログ・ボックス
これらのウィザードの実装ページ、またはこれらのエディタの「実装」タブを使用すると、ファンクション本体またはプロシージャ本体の一部となるPL/SQLコードを指定できます。PL/SQLコードで変換を使用できます。