この章では、マッピングのソースおよびターゲットとしての演算子の使用方法について説明します。内容は次のとおりです。
マッピングの定義には次の一般的な手順が含まれます。
この章では、手順6のソースおよびターゲット演算子のプロパティの設定、および各演算子の使用方法の詳細を説明します。
Oracleソースおよびターゲット演算子とは、ワークスペースのOracleデータ・オブジェクトにバインドされている演算子を指します。これらの演算子をマッピングで使用して、Oracleデータ・オブジェクトへのデータのロードまたはOracleデータ・オブジェクトからのデータのソーシングを実行します。
マッピング・エディタの「プロパティ」パネルに、選択した演算子のプロパティが表示されます。これにはソースおよびターゲット演算子のパラメータの次のカテゴリが含まれます。
演算子名: 演算子名に、「プライマリ・ソース」、「ターゲット・ロード順序」および「ロード・タイプ」 を設定できます。「Oracleターゲット演算子のロード・タイプ」および「フラット・ファイルのロード・タイプ」で説明しているとおり、「ロード・タイプ」にはターゲットのタイプに応じて様々な値を設定できます。
条件付きロード: 「更新用ターゲット・フィルタ」、「削除用ターゲット・フィルタ」および「制約による一致」を設定できます。
キー(読取り専用): 「キー名」、「キー・タイプ」および「参照キー」を参照できます。演算子がソースとして機能する場合は、キー設定は結合演算子とともに使用されます。演算子がターゲットとして機能する場合は、キー設定は「制約による一致」パラメータとともに使用されます。
ファイル・プロパティ: ファイル・プロパティでは、「バウンド名」を参照できます。
エラー表: 「エラー表名」、「ロールアップ・エラー」および「この演算子からのエラーのみを選択」を設定できます。このプロパティのセクションは、表、ビュー、マテリアライズド・ビュー、外部表およびディメンションのマッピング演算子にのみ表示されます。
Oracle Application Embedded Data Warehouse(EDW)ユーザーは、EDWのドキュメントを参照してください。その他のユーザーは、このパラメータは無視してください。
ロード・タイプのプロパティを使用して各ターゲット演算子のロード・タイプを選択します。
ディメンションおよびキューブ演算子を除き、すべてのOracleターゲット演算子について、次のオプションを1つ選択します。
CHECK/INSERT: ターゲットに既存の行があるかどうかをチェックします。既存の行がない場合は、受信行がターゲットに挿入されます。
DELETE: 受信行セットを使用して、ターゲットの行のうち削除対象となる行がどれであるかを判別します。
DELETE/INSERT: ターゲットの行をすべて削除し、新規行を挿入します。
INSERT: 受信行セットをターゲットに挿入します。同じプライマリ・キーまたは一意のキーの行がすでに存在する場合は、挿入に失敗します。
INSERT/UPDATE: それぞれの受信行について最初に挿入演算を実行します。挿入に失敗した場合、更新演算が行われます。更新する一致レコードがない場合は、挿入が実行されます。INSERT/UPDATEを選択しており、「デフォルト・オペレーティング・モード」が行ベースの場合、ターゲットに一意制約を設定する必要があります。オペレーティング・モードがセット・ベースの場合は、Warehouse BuilderによりMERGE文が生成されます。
なし: ターゲットに対して演算を実行しません。この設定はテストに便利です。抽出と変換は実行されますが、ターゲットには何も影響しません。
TRUNCATE/INSERT: ターゲットを切り捨てた後、受信行セットを挿入します。このオプションを選択すると、マッピングの実行に失敗した場合でも、操作をロールバックできません。切捨てでは、ターゲットからデータを完全に削除します。
UPDATE: 受信行セットを使用してターゲットの既存の行を更新します。指定の一致条件に合致する行がない場合は、何も変更されません。
ターゲット・モジュールの構成プロパティ「PL/SQL生成モード」をOracle 10gまたはOracle 10gリリース2に設定すると、ターゲットがセット・ベース・モードで更新されます。生成されるコードには、挿入句なしでMERGE文が含まれます。9i以前のバージョンのPL/SQLコードを生成するよう構成されたモジュールについては、ターゲットは行ベース・モードで更新されます。
UPDATE/INSERT: それぞれの受信行について最初に更新を実行します。「UPDATE/INSERT」を選択しており、ターゲットの「デフォルト・オペレーティング・モード」がセット・ベースの場合、MERGE文が生成されます。
ディメンションとキューブについては、ロード・タイプのプロパティに「ロード」と「削除」のオプションがあります。ディメンションまたはキューブにデータをロードする場合は「ロード」を使用し、データを削除する場合は「削除」を使用します。
「SQL*Loaderパラメータ」を構成し、マッピング用に「SQL*Loader」のオプションを定義します。構成中に選択した値は、生成されたSQL*Loaderと実行時の制御ファイルに直接影響します。SQL*Loaderでは、データをロードする2つの方法があります。
従来型パスによるロード: SQL INSERT文を実行し、Oracleデータベースに表を移入します。
ダイレクト・パス・ロード: Oracleデータ・ブロックをフォーマットし、データベース・ファイルに直接データ・ブロックを書き込むことによってOracleデータベースのオーバーヘッドを大幅に削減します。直接ロードでは他のユーザーとのデータベース・リソースの競合がないため、常にディスク・スピードに近い速度でデータをロードできます。
制限、セキュリティおよびバックアップ関連の特定の考慮事項は、データベース・ファイルへのそれぞれのアクセス方法に継承されます。詳細は、Oracle 9iデータベース・ユーティリティを参照してください。
SQL*Loaderを使用してフラット・ファイルからデータを抽出するマッピングの設計および実装では、生成されたSQL*Loaderスクリプトに影響を及ぼす様々なプロパティを構成できます。1つのマッピングの各ロード演算子には、ロード・タイプと呼ばれる演算子のプロパティがあります。このプロパティに含まれる値は、ロード演算子に対するSQL*Loader INTO TABLE句の生成方法に影響します。SQL*Loaderではデータの追加、挿入、置換または切捨てが可能ですが、この処理中はデータを更新できません。表17-1に、各ロード・タイプに関連付けられたINTO TABLE句と、その既存ターゲットのデータに対する影響を示します。
表17-1 ロード・タイプとINTO TABLEの関係
ロード・タイプ | INTO TABLE句 | 既存データのターゲットに対する影響 |
---|---|---|
INSERT/UPDATE |
APPEND |
追加データをターゲットに追加します。 |
DELETE/INSERT |
REPLACE |
既存データを削除し、新規データと置換します(DELETEトリガーが起動します)。 |
TRUNCATE/INSERT |
TRUNCATE |
既存データを削除し、新規データと置換します(DELETEトリガーが起動します)。 |
CHECK/INSERT |
INSERT |
ターゲット表が空であるとみなされます。 |
NONE |
INSERT |
ターゲット表が空であるとみなされます。 |
このプロパティでは、同じマッピング内の複数のターゲットのロード順序を指定できます。Warehouse Builderは、デフォルトのロード順序を外部キー関係に基づいて決定しますが、このデフォルト順序は棄却できます。
条件でTRUEと評価された場合は、その行が更新ロード操作に含まれます。
条件でTRUEと評価された場合は、その行が削除ロード操作に含まれます。
ターゲット演算子をUPDATE条件またはDELETE条件付きでロードする場合は、一致基準を指定できます。一致基準とロード基準は手動で設定することも、組込みのオプションから選択することもできます。「制約による一致」ダイアログでは、ターゲットの一意キーまたは主キーの情報を使用して、属性に手動で設定されている一致基準とロード基準を上書きするかどうかを指定します。「制約による一致」プロパティをクリックすると、その演算子で定義されている制約と組込みのロード・オプションがリスト表示されます。
「すべての制約」を選択すると、手動で設定した属性のロード設定がすべて無効になり、表17-2に示されているようにターゲット属性のロードおよび一致プロパティが設定されているものとしてデータがロードされます。
表17-2 「すべての制約」を選択した場合のターゲットのロード設定
ロード設定 | キー属性 | その他すべての属性 |
---|---|---|
行の更新中に列をロードする |
いいえ |
はい |
行の更新中に列を一致させる |
はい |
いいえ |
行の削除中に列を一致させる |
はい |
いいえ |
「制約なし」を選択すると、手動で設定したすべてのロード設定が優先され、データはその設定に従ってロードされます。
演算子にすでに定義されている制約を選択すると、手動で設定した属性のロード設定がすべて無効になり、表17-4に示されているようにターゲットのロードおよび一致プロパティが設定されているものとしてデータがロードされます。
属性レベルで変更を加えた後、すべての設定をデフォルトに戻す場合は、「拡張」をクリックします。これにより、ロード・オプションを含むリストが表示されます。デフォルトに戻される設定は、選択する制約タイプに応じて異なります。
たとえば、すべてのキー属性の一致プロパティをリセットする場合は、「拡張」をクリックしてから「制約なし」を選択し、「OK」をクリックします。手動で設定したロード設定が上書きされ、表17-4に示される設定に基づいてデータがロードされます。
表17-4 「拡張」と「制約なし」を選択した場合のデフォルトのロード設定
ロード設定 | すべてのキー属性 | その他すべての属性 |
---|---|---|
行の更新中に列をロードする |
はい |
はい |
行の更新中に列を一致させる |
いいえ |
いいえ |
行の削除中に列を一致させる |
いいえ |
いいえ |
また、「拡張」をクリックしてから「すべての制約」を選択すると、手動で設定したロード設定が上書きされ、表17-5に示される設定に基づいてデータがロードされます。
コード・ジェネレータで使用する名前です。演算子が現在バインドおよび同期化されている場合、このプロパティは読取り専用になります。演算子がまだバインドされていない場合は、ワークスペース・オブジェクトに対して同期化する前に、マッピング・エディタでバウンド名を編集できます。
主キー、外部キーまたは一意キーの名前です。
主キー、外部キーまたは一意キーのキー・タイプです。
演算子に外部キーがある場合は、「参照キー」に参照オブジェクトの主キーまたは一意キーが表示されます。
ロード操作中の無効なレコードを格納する、エラー表の名前です。
「はい」を選択して、エラー表からエラー名で選択したレコードをロールアップします。これにより、特定の入力レコードで生成されたエラーはすべて、エラー名属性で連結されたエラー名を持つ単一のレコードにロールアップされます。
エラー表から選択された行には、このマップ実行でこの演算子によって作成されたエラーのみが含まれます。
ソースおよびターゲット演算子のそれぞれの属性に対して、パラメータは次のタイプに分類されます。
属性のプロパティ: 「属性のプロパティ」では、「バウンド名」プロパティを参照できます。
ロード・プロパティ: 表演算子、ディメンション演算子、キューブ演算子、ビュー演算子およびマテリアライズド・ビュー演算子には、「ロード・プロパティ」カテゴリがあります。このカテゴリには、「行の挿入中に列をロードする」、「行の更新中に列をロードする」、「行の更新中に列を一致させる」、「更新: 演算」および「行の削除中に列を一致させる」の設定が含まれます。
データ型情報: データ型のプロパティは、すべての演算子に適用可能です。これには「データ型」、「精度」、「スケール」、「長さ」および「小数秒精度」があります。
このアイテムを識別するためにコード・ジェネレータで使用される名前です。デフォルトでは、アイテムと同じ名前です。これは演算子がバインドされている場合は、読取り専用の設定になります。
属性のデータ型です。
データ型が数値型または浮動小数点型の場合、この属性の最大桁数になります。これは読取り専用の設定です。
小数点の右の桁数です。数値属性にのみ適用されます。
CHAR
、VARCHAR
またはVARCHAR2
属性の最大長です。
日時フィールドの小数部の桁数です。0から9までの数値を入力できます。このプロパティは、TIMESTAMP
のデータ型に対してのみ使用されます。
この設定により、マッピングに関係なく、データのターゲットへの移動を回避できます。「はい」(デフォルト)を選択した場合、データがマッピングのターゲットに到達します。
この設定では、マッピングに関係なく、選択した属性データのターゲットへの移動を回避できます。「はい」(デフォルト)を選択すると、データがマッピングのターゲット属性に移動します。一意キーの列が一部マップされていない場合、一意キーは一致条件の構成に使用されません。一意キーの列がまったくマップされていない場合、エラーが表示されます。キー列以外の列がマップされていない場合、その列はロードには使用されません。
この設定では、ソース属性とマップ先のターゲット属性の間で一致するものがあった場合のみ、データ・ターゲット行が更新されます。一致する場合は、行の更新が実行されます。このプロパティを「はい」(デフォルト)に設定すると、属性は一致属性として使用されます。この設定を使用する場合は、すべてのキー列をマップする必要があります。ターゲット・エンティティに定義されている一意キーが1つのみの場合は、制約を使用してこの設定を上書きします。
一致する行が検出された場合に更新演算を実行するように指定できます。更新演算は、ソース属性のデータを使用し、ターゲット属性に対して実行されます。表17-6では、指定可能な更新演算を示し、更新演算の論理を説明しています。
表17-6 更新演算
演算 | 例 | ソースの値が5で、ターゲットの値が10の場合の結果 |
---|---|---|
= |
TARGET = SOURCE |
TARGET = 5 |
+= |
TARGET = SOURCE + TARGET |
TARGET = 15(5 + 10) |
-= |
TARGET = TARGET - SOURCE |
TARGET = 5(10 - 5) |
=- |
TARGET = SOURCE - TARGET |
TARGET = マイナス5(5 - 10) |
||= |
TARGET = TARGET || SOURCE |
TARGET = 105(10は5で切捨て) |
=|| |
TARGET = SOURCE || TARGET |
TARGET = 510(5は10で切捨て) |
ソース属性とマップ先のターゲット属性が一致する場合のみ、データ・ターゲット行を削除します。一致する場合は、行の削除が実行されます。このプロパティを「はい」(デフォルト)に設定すると、属性は一致属性として使用されます。制約はこの設定よりも優先される場合があります。
定数演算子により、定数値を定義できます。定数はPL/SQLまたはABAPマッピングのどの箇所でも使用できます。
注意: SQL*Loaderマッピングについては、かわりにデータ・ジェネレータ演算子を使用してください。
定数演算子は、1つ以上の定数属性を含む単一の出力グループを作成します。Warehouse Builderでは、マッピング実行の最初に定数を初期化します。
たとえば、現在のシステム日付の値を表演算子にロードするため、定数演算子を使用します。式ビルダーで事前定義済の変換のリストから、パブリック変換SYSDATE
を選択します。パブリック変換の詳細は、第15章「データ変換」を参照してください。
PL/SQLまたはABAPマッピングで定数演算子を定義する手順は次のとおりです。
マッピング・エディタのキャンバスに定数演算子をドロップします。
定数演算子を右クリックして「エディタを開く」を選択します。
「定数エディタ」ダイアログ・ボックスが表示されます。
「出力」タブで「追加」ボタンをクリックして出力属性を追加します。
属性の名前とデータ型を変更できます。
「OK」をクリックして、「定数エディタ」ダイアログ・ボックスを閉じます。
マッピング・エディタで定数演算子の出力属性を選択します。
マッピング・エディタの「プロパティ」パネルに出力属性のプロパティが表示されます。
「式」フィールドの右側の省略記号のボタンをクリックします。
「式ビルダー」ダイアログ・ボックスが表示されます。このダイアログ・ボックスを使用して定数の式を記述します。
出力属性に割り当てられた長さ、精度およびスケール・プロパティは、マッピングで定義した式によって戻される値と一致する必要があります。VARCHAR
、CHAR
またはVARCHAR2
のいずれかのデータ型については、定数文字列のリテラルを'my_string'
のように一重引用符で囲みます。
オブジェクトの構成演算子では、それを構成する個々の属性を使用して、SQLオブジェクトのデータ型(オブジェクト・タイプおよびコレクション・タイプ)、PL/SQLオブジェクト・タイプおよびマッピングのカーソルを作成できます。
たとえば、データ型がオブジェクト・タイプの列を含む表へのデータのロードに使用する、SQLオブジェクト・タイプを作成する場合に、オブジェクトの構成演算子を使用できます。また、この演算子を使用して、アドバンスト・キューにデータをロードするペイロードを作成できます。この演算子では、SYS.REFCURSORオブジェクトも構成できます。
オブジェクトの構成演算子には、入力グループと出力グループが1つずつあります。入力グループはオブジェクト・タイプを構成する個々の属性を表します。オブジェクトの構成演算子の出力は、個々の属性を使用して作成したオブジェクト・タイプです。マッピングでは、オブジェクトの構成演算子の出力属性のデータ型が、マップ先のターゲット属性と一致している必要があります。
図17-1に、オブジェクトの構成演算子を使用したマッピングを示します。ソース表CUST_SRC
では、個別の属性を使用して、顧客アドレスの各コンポーネントを格納します。ただし、ターゲット表CUSTOMERS
では、顧客アドレスの格納にオブジェクト・タイプを使用します。CUST_SRC
表からCUSTOMERS
表にデータをロードするには、顧客アドレスのシグネチャがCUSTOMERS
の顧客アドレスのシグネチャと一致するオブジェクト・タイプであることが必要です。オブジェクトの構成演算子は、顧客アドレスを入力として格納するCUSTOMERS_SRC
から個々の属性を取得し、オブジェクト・タイプを構成します。オブジェクトの構成演算子は、ワークスペースに格納されている、ユーザー定義のデータ型CUST_ADDR
にバインドされています。
マッピングでオブジェクトの構成演算子を定義する手順は次のとおりです。
オブジェクトの構成演算子をマッピング・エディタにドラッグ・アンド・ドロップします。
「オブジェクトの構成の追加」ダイアログ・ボックスを使用して、オブジェクトを作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
オブジェクトの構成に使用する個々のソース属性を、オブジェクトの構成演算子の入力グループにマップします。
オブジェクトの構成演算子の出力属性をターゲット属性にマップします。ターゲット属性のデータ型はオブジェクト・タイプになります。
オブジェクトの構成演算子の出力属性のシグネチャとターゲット属性のシグネチャは、同じである必要があります。
キューブ演算子を使用して、キューブからのデータのソーシングやキューブへのデータのロードを行います。
キューブ演算子には、キューブと同じ名前のグループが含まれます。このグループには、各キューブ・メジャーの属性があります。キューブが参照する各ディメンション・レベルのサロゲート識別子やビジネス識別子の属性も含まれます。また、キューブ演算子では、キューブが参照する各ディメンションに対してグループが1つ表示されます。
キューブ演算子は、現在のプロジェクトの任意のOracleモジュールに定義されているキューブにバインドできます。また、キューブ演算子を同期化して、バインドされているキューブに対する変更内容で更新もできます。キューブ演算子を同期化するには、マッピング・エディタのキャンバスでキューブ演算子を右クリックして、「同期化」を選択します。
キューブ演算子を含むマッピングを作成する手順は次のとおりです。
キューブ演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
Warehouse Builderにより、「キューブの追加」ダイアログ・ボックスが表示されます。
「キューブの追加」ダイアログ・ボックスを使用して、キューブを作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
また、手順1と2はまとめて実行もできます。マッピング・エディタでエクスプローラ・ウィンドウの「選択ツリー」タブにナビゲートします。キューブを選択してこれをマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
キューブ演算子からターゲットへ属性をマップ、またはソース演算子からキューブ演算子へ属性をマップします。
キューブをロードする場合、ソースのデータ・フローを、参照レベルのビジネス識別子を表す属性にマップします。検索が実行され、該当するサロゲートIDがキューブ表に格納されます。たとえば、属性をディメンション演算子からキューブ演算子にマップする場合は、ディメンションのサロゲート識別子の検索に必要であれば、キー参照演算子が作成されます。
参照条件で複数の行が戻される可能性がある場合は、戻された行から1行のみ選択するようにしてください。これは、デュプリケータ解除演算子またはフィルタ演算子を使用して実行できます。
キューブ演算子にはACTIVE_DATEと呼ばれる属性が含まれています。この属性は、タイプ2のSCD内のどのレコードがアクティブ・レコードであるかを決定するために使用される時点を示します。このプロパティは、ロード中のキューブにタイプ2のSCDが1つ以上存在する場合にのみ適用可能です。
ソースの属性をACTIVE_DATEにマップしない場合、デフォルトとしてSYSDATE
が使用されます。
ソースの属性をACTIVE_DATEにマップした場合、ソースの属性の値を使用して、キューブ・レコードで参照されるタイプ2のSCDレコードのバージョンが決定されます。レベルがタイプ2のSCDであるディメンションを参照するキューブの場合、ディメンション・メンバーを決定するために生成されるWHERE
句は次のとおりです。
... WHERE (... (<dim_name>.DIMKEY = <lookup_for_dimension_dimkey> AND (<level>_EFFECTIVE_DATE <= ACTIVE_DATE AND <level>_EXPIRATION_DATE >= ACTIVE_DATE) OR (<level>_EFFECTIVE_DATE <= ACTIVE_DATE AND <level>_EXPIRATION_DATE IS NULL)) ...)
キューブをロードするマッピングで、「デフォルトのオープン・レコード終了時間」がNULL以外の値に設定されているタイプ2のSCDを1つ以上参照する場合、キューブ演算子のACTIVE_DATE属性は、ディメンション・レコードの範囲を定義する日付値が含まれているソースからマップされる必要があります。
ACTIVE_DATE属性がソースからマップされない場合、SYSDATE
値によってディメンション・レコードの日付範囲が定義されます。
ACTIVE_DATE属性がソースからマップされた場合、ソースの属性値を使用して範囲の比較が実行され、ロードする必要があるディメンション・レコードが決定されます。
ディメンション・メンバーの参照に使用されるロジックは、前述のWHERE
句に示されています。
図17-2に、キューブ演算子をターゲットとして使用するマッピングを示します。3つのソース表からのデータは、ジョイナ演算子を使用して結合されます。結合データと他のソース表からのデータの集計には、アグリゲータ演算子が使用されます。アグリゲータ演算子の出力は、キューブ演算子にマップされます。
キューブ演算子には、キューブのロードに使用できる次のプロパティがあります。
ターゲット・ロード順序: このプロパティでは、同じマッピング内の複数のターゲットのロード順序を指定します。Warehouse Builderは、デフォルト順序を外部キー関係に基づいて決定します。このプロパティを使用すると、このデフォルト順序を棄却できます。
キューブの解決: このプロパティに「はい」 を設定すると、キューブのロード中にキューブ・データが集計されます。これによりロード時間は長くなりますが、問合せ時間は短縮されます。データは最初にロードされ、次に集計されます。
増分集計: このオプションを選択すると、増分ロードを実行できます。これは、以前にキューブが解決されている場合は、後続のロードでは新規データのみが集計されることを意味します。
AWステージ済ロード: TRUEの場合、セット・ベースのAWロード・データは、AWにロードされる前に一時表にステージされます。
AWロード前に切捨て: キューブのロード開始前に既存の全キューブの値を切り捨てる必要があるかどうかを示します。このプロパティを「はい」に設定すると、既存のキューブ・データが切り捨てられます。
単一のデータ・ジェネレータ演算子を使用して、定数または順序をSQL*Loaderマッピングに取り込みます。各SQL*Loaderマッピングに含められるデータ・ジェネレータ演算子は1つのみです。
フラット・ファイルのソースおよびターゲットのマッピングでは、データ・ジェネレータ演算子によってマッピングがSQL*Loaderに接続され、データベース・レコードに格納されるデータが生成されます。
次のファンクションを使用できます。
RECNUM
SYSDATE
SEQUENCE
Warehouse Builderでは、フィールド指定として順序、レコード番号、システム日付および定数を指定するのみでデータを生成できます。SQL*Loaderでは、LOADキーワードで指定されたのと同じ数のレコードが挿入されます。
データ・ジェネレータ演算子には、レコード番号、システム日付および一般的な順序に対応した事前定義済の複数の属性がある1つの出力グループがあります。属性は新たに作成できますが、事前定義済の属性は変更できません。
図17-3に、データ・ジェネレータ演算子を使用して現行システム日付を取得するマッピングを示します。フラット・ファイルCUSTOMERS_TXT
のデータはステージング表CUST_STAGE
にロードされます。ステージング表には、データがロードされた日付の追加属性が含まれます。データ・ジェネレータ演算子のSYSDATE属性は、ステージング表CUST_STAGE
のDATE_LOADED
属性にマップされます。
SQL*Loaderマッピングでデータ・ジェネレータを定義する手順は次のとおりです。
マッピング・エディタのキャンバスにデータ・ジェネレータ演算子をドロップします。
演算子を右クリックして「詳細をオープン」を選択します。
DATA_GENERATORエディタが表示されます。
DATA_GENERATORエディタの「出力属性」タブを選択します。
Warehouse Builderにより、事前定義済の出力属性RECNUM、SYSDATE1およびSEQUENCEが表示されます。
「出力属性」タブで、事前定義済の出力属性のプロパティを定義し、オプションで説明を入力します。
「OK」をクリックしてDATA_GENERATORエディタを閉じます。
マッピング・キャンバスの演算子上で、RECNUM属性を選択します。
Warehouse Builderにより、マッピング・エディタの「プロパティ」パネルにこの属性のプロパティが表示されます。
「式」フィールドで省略記号のボタンをクリックして「式ビルダー」を開き、式を定義します。
SEQUENCE属性について手順6と7を繰り返します。
レコードのロード元であるレコード番号に属性を設定するには、RECNUMキーワードを使用します。レコードは最初のデータ・ファイルの先頭、レコード1から順にカウントされます。RECNUMは、1つの論理レコードがまとめられるごとに増分されます。これは廃棄、スキップ、拒否、またはロードされたレコードについて増分されます。たとえば、オプションSKIP=10を使用すると、最初にロードされたレコードのRECNUMは11になります。
SYSDATEで指定した列は、SQL言語のSYSDATEファンクションで定義した形式で現行システム日付を取得します。
ターゲット列のデータ型はCHAR
またはDATE
である必要があります。列のデータ型がCHAR
の場合、日付はdd-mon-yyの書式でロードされます。システム日付がDATE
列にロードされると、この列には時間書式と日付書式でアクセスできます。新規システム日付や時間は、従来型パスのロードで挿入されたレコードの各配列、およびダイレクト・パス・ロード中にロードされたレコードの各ブロックに使用されます。
SEQUENCEキーワードは列の一意の値を保証します。SEQUENCEは、ロードまたは拒否される各レコードを増分します。廃棄またはスキップしたレコードは増分しません。
列名とSEQUENCEファンクションの組合せにより、列の指定が完全になります。表17-7に、順序値に使用可能なオプションを示します。
表17-7 順序値のオプション
値 | 説明 |
---|---|
column_name |
順序が割り当てられるデータベースの列の名前です。 |
SEQUENCE |
列の値を指定します。 |
integer |
開始順序番号を指定します。 |
COUNT |
順序は表にあるレコードと増分を加算した番号から始まります。 |
MAX |
順序は列に増分を加算した現在の最大値から始まります。 |
incr |
レコードのロード後または拒否後に順序番号が増分する値です。 |
ロード中にレコードが拒否されると、データ・エラーに関係なく、挿入の順序が保たれます。たとえば、ある列の4つの行に順序番号10、12、14、16が割り当てられている場合に、12の行が拒否されると、10、12、14ではなく、10、14、16が割り当てられている有効な行が挿入されます。拒否されたデータを修正して再度挿入する場合は、順序と一致するように列を手動で設定できます。
ディメンション演算子を使用して、ディメンション、および緩やかに変化するディメンションからのデータのソーシングやディメンションへのデータのロードを行います。
ディメンション演算子には、ディメンションの各レベルにグループが1つあります。グループにはディメンション・レベルと同じ名前を使用します。各レベルのレベル属性は、レベルを表すグループに示されています。
データ・フローはサロゲート識別子属性や任意のディメンション・レベルの親サロゲート識別子の参照属性にはマップできません。Warehouse Builderでは、ディメンションのロード時にこのような列が自動的に入力されます。
ワークスペースに格納されているディメンションとディメンション演算子をバインドし、同期化できます。生成済コードのエラーを回避するには、ディメンション演算子を含むマッピングを配布する前に、ワークスペース・ディメンションの配布が完了していることを確認します。ディメンション演算子をワークスペース・ディメンションと同期化するには、マッピング・エディタのキャンバスのディメンションを右クリックして、「同期化」を選択します。
マッピングでディメンション演算子を使用する手順は次のとおりです。
ディメンション演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
Warehouse Builderにより、「ディメンションの追加」ダイアログ・ボックスが表示されます。
「ディメンションの追加」ダイアログ・ボックスでディメンションを選択します。
また、手順1と2はまとめて実行もできます。マッピング・エディタでエクスプローラ・ウィンドウの「選択ツリー」タブにナビゲートします。ディメンションを選択してこれをマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
ディメンション演算子からターゲットへ属性をマップ、またはソースからディメンション演算子へ属性をマップします。
マッピング・エディタの「プロパティ」パネルを使用して、ディメンションまたは緩やかに変化するディメンションからのデータのロードまたは削除に関する追加の詳細を定義するオプションを設定します。
演算子、ディメンション内の各レベルを表すグループおよびレベル属性という3つのレベルでプロパティを設定できます。
ディメンション演算子には、次のプロパティがあります。
ロード・タイプ ディメンションについて実行される操作のタイプを表します。選択できるオプションは、次のとおりです。
LOAD: ディメンションまたは緩やかに変化するディメンションにデータをロードするには、この値を設定します。
REMOVE: ディメンションまたは緩やかに変化するディメンションからデータを削除するには、この値を設定します。
データをロードまたは削除する際に、ソース・レコードがディメンション内に存在するかどうかを判別するための検索が実行されます。照合は自然キー識別子によって実行されます。レコードが存在する場合、REMOVE操作により既存のデータが削除されます。LOAD操作では既存のデータが更新され、その後新規データがロードされます。
親レコードを削除すると、子レコードは存在しない親を参照する点に注意してください。
ターゲット・ロード順序 同じマッピング内の複数ターゲットのロード順序を指定します。Warehouse Builderは、外部キー関連に基づいてデフォルトの順序を決定します。デフォルトの順序を棄却するには、このプロパティを使用します。
デフォルトの初期レコード有効時間 このプロパティはタイプ2のSCDにのみ適用可能です。特定のディメンション・レコードの初期ロードに対する有効時間として割り当てられるデフォルト値を示します。このプロパティに設定されているデフォルト値はSYSDATE
です。
デフォルトのオープン・レコード有効時間 このプロパティはタイプ2のSCDにのみ適用可能です。初期レコードの後のオープン・レコードの有効時間に設定されるデフォルト値を示します。このプロパティのデフォルト値はSYSDATE
です。この値は変更しないでください。
デフォルトのオープン・レコード終了時間 このプロパティは、タイプ2のSCDにのみ適用可能です。これは、ディメンション内のすべてのレベルについて、新規に作成したオープン・レコードの終了時間として使用される日付値を表します。デフォルト値は「NULL」です。
Type2 Gap このプロパティはタイプ2のSCDにのみ適用可能です。レコードがバージョン管理されている場合に、古いレコードの終了時間と現行レコードの有効時間の間の時間間隔を示します。
トリガー属性の値が更新されると、現行レコードがクローズされ、更新された値で新しいレコードが作成されます。古いレコードのクローズおよび現行レコードのオープンは同時に行われるため、両方で同じ値を使用するのではなく、古いレコードの終了時間とオープン・レコードの有効時間の間に時間間隔を置くことをお薦めします。
Type2 Gap Units このプロパティはタイプ2のSCDにのみ適用可能です。「Type2 Gap」プロパティで示されたギャップ間隔を測定するために使用される時間単位を示します。オプションは、「秒」、「分」、「時間」、「日」および「週」です。
タイプ2 現行のみ抽出/削除 このプロパティは、タイプ2のSCDにのみ適用可能です。抽出または削除するレコードを指定するには、このプロパティを使用します。このプロパティには次の値を設定できます。
YES: タイプ2のSCDからデータを抽出する場合、現行レコードのみが抽出されます。タイプ2のSCDからデータを削除する場合、現行レコードのみがクローズされます(有効期限は「SYSDATE」または「デフォルトのオープン・レコード終了時間」プロパティで定義された日付のいずれかに設定されます)。
スノーフレーク実装を使用するタイプ2のSCDの場合、タイプ2トリガーを持つ子レコードが含まれるレコードは削除できないので注意してください。
NO: タイプ2のSCDからデータを抽出する場合、自然識別子と一致する、履歴レコードを含むすべてのレコードがディメンションから抽出されます。
タイプ2のSCDからデータを削除する場合、自然識別子と一致する、履歴レコードを含むすべてのレコードがクローズされます。ただし、レコードはディメンションから削除されません。クローズしたレコードの子レコードはすべて、クローズした親にリンクしたままとなります。
AWロード前に切捨て このプロパティはMOLAPディメンションにのみ適用可能です。これは、新規データをロードする前に既存のすべてのディメンション・データを切り捨てるかどうかを示します。新規データをロードする前に既存のすべてのディメンション・データを切り捨てるには、このプロパティをYESに設定します。
AWステージ済ロード このプロパティはMOLAPディメンションにのみ適用可能です。アナリティック・ワークスペースへのロード前にセット・ベースのロード・データを一時表にステージするには、このオプションを選択します。
ディメンション演算子内の各グループはディメンション・レベルを表します。ディメンション・レベルごとに次のプロパティを設定できます。
抽出タイプ: ディメンションがソースとして使用される場合に実行される抽出操作を表します。タイプ2のSCDからのみ現行レコードを抽出するには、「現行のみ抽出(タイプ2のみ)」を選択します。このプロパティはタイプ2のSCDにのみ有効です。ディメンションまたはSCDからすべてのレコードを抽出するには、「すべて抽出」を選択します。
デフォルトのオープン・レコード終了時間: このプロパティは、タイプ2のSCDにのみ適用可能です。これは、新規に作成したオープン・レコードの終了時間として使用される日付値を表します。デフォルト値は「NULL」です。
注意: 「コミット制御」プロパティを「手動」に設定してある場合は、「自動ヒントが有効です」プロパティを「FALSE」に設定してください。設定しないと、マッピングが正しく実行されない場合があります。 |
タイプ2のSCDの演算子プロパティ値の例
たとえば、Products
というタイプ2のSCDをロードするマッピングで、次の構成プロパティを使用するとします。
デフォルトの初期レコード有効時間: 01-jan-2000
デフォルトのオープン・レコード有効時間: SYSDATE
デフォルトのオープン・レコード終了時間: 01-jan-2099
Type2 Gap: 1
Type2 Gap Units: MINUTE
Product
は、このタイプ2のSCDのリーフ・レベルです。有効日および有効期限の属性のデータ型はTIMESTAMP
です。最初の製品レコードは2007年4月20日にロードされます。製品レコードでは次の値が使用されます。
有効時間: 01-jan-2000
終了時間: 01-jan-2099
この製品レコードのトリガー属性が2007年4月22日午前10時45分に更新された場合、現行の製品レコードはクローズされ、新しいレコードが更新された値でオープンされます。
クローズされた製品レコードの値は次のようになります。
有効時間: 01-jan-2000
終了時間: 22-apr-2007 10:44:00
現在オープンしているProduct
レコードの値は次のようになります。
有効時間: 20-apr-2007 10:45:00
終了時間: 01-jan-2099
マッピングのディメンション演算子を使用すると、ワークスペース・ディメンションまたはSCDに格納されているデータをソーシングできます。
ディメンションからのデータのソーシング: ディメンションに格納されているデータをソーシングするには、ディメンション演算子が含まれるマッピングを作成します。このディメンション演算子が、ソース・データを含むワークスペース・ディメンションにバインドされていることを確認する必要があります。次に、属性をディメンション・レベルからターゲット演算子にマップします。ディメンションからデータをソーシングするマッピングの例は、図17-2を参照してください。
タイプ2緩やかに変化するディメンションからのデータのソーシング: ディメンション演算子を使用すると、タイプ2のSCDに格納されているデータをソーシングできます。タイプ2のSCDにはシングル・レコードの複数のバージョンが格納されているため、使用するレコードのバージョンを指定する必要があります。
各ディメンション・レベルを示すグループの「抽出タイプ」プロパティを使用して、データのソーシング元となるレベル・レコードのバージョンを指定します。特定のレベル・レコードのすべてのバージョンをロードするには、「すべて抽出」を選択します。レベル・レコードの最新バージョンのみを取得するには、「抽出タイプ」プロパティを「現行のみ抽出(タイプ2のみ)」に設定します。
ディメンション・レベルのプロパティを設定するには、ディメンション演算子のレベルを示すグループを選択します。「グループのプロパティ」パネルに、レベルのプロパティが表示されます。
タイプ3緩やかに変化するディメンションからのデータのソーシング: タイプ3のSCDからデータをソーシングするには、ディメンション演算子が含まれるマッピングを作成します。データのソーシング元となるワークスペースにあるタイプ3のSCDに、このディメンション演算子をバインドします。タイプ3のSCDでは、個別の属性を使用して、バージョニング対象属性の履歴値を格納します。このため、履歴データをソーシングするには、バージョニング対象属性の前の値を示す属性をターゲットにマップします。現在のデータをソーシングするには、レベル属性を格納する属性をターゲットにマップします。
図17-4に、タイプ3のディメンションPRODUCTS
から履歴データ・レコードをソーシングするマッピングを示します。この例では、履歴データをソーシングするために、PREV_DESCRIPTION
、PREV_PACKAGE_TYPE
またはPREV_PACKAGE_SIZE
属性を使用しています。現在のデータをソーシングするには、DESCRIPTION
、PACKAGE_TYPE
またはPACKAGE_SIZE
を使用します。
マッピングでディメンション演算子をターゲットとして使用し、ディメンションおよびSCDにデータをロードします。ソース・オブジェクトを表す演算子からディメンションまたはSCDへのデータ・フローを定義します。
Warehouse Builderは、ディメンションの最上位から順にデータをロードします。
注意: レベルのサロゲート識別子または親サロゲート識別子参照にはデータ・フローをマップできません。 |
ディメンションにデータをロード ディメンションにレコードをロードする前に、ロード対象レコードと同じビジネス識別子を持つレコードがディメンション内に存在するかどうかがチェックされます。類似したレコードが存在しない場合、ソースのレコードがディメンションに追加されます。類似したレコードが存在する場合、新規属性値に合せて現行レコードが更新されます。
図17-5では、PRODUCTS
ディメンションにデータをロードするマッピングを演算子PRODUCTS_OUT
で表しています。ソース・データはCATEGORIES
およびPRODUCTS
という2つの表に格納されています。CATEGORIES
表には、カテゴリおよびサブカテゴリ情報の両方が格納されています。そのため、この表のデータは2つのフィルタ演算子CATS
およびSUBCATS
を使用してフィルタされます。フィルタされたデータはこの後CATEGORIES
レベルおよびSUBCATEGORIES
ディメンション・レベルにマップされます。ディメンションのTOTAL
レベルは定数演算子を使用してロードされます。PRODUCTS
表のデータはディメンション内のPRODUCTS
レベルに直接マップされます。
ディメンションをロードするためのデータ・フローを定義する場合、データを実際にディメンションにロードするインライン・プラッガブル・マッピングが作成されます。このプラッガブル・マッピングを表示するには、マッピング・エディタのキャンバスでディメンション演算子を選択し、グラフィカル・ツールバーの「子グラフの表示」アイコンをクリックします。
タイプ2のSCDにデータをロード タイプ2のSCDにレコードをロードする前に、同じビジネス識別子を持つレコードがタイプ2のSCDに存在するかどうかが最初にチェックされます。レコードが存在しない場合、タイプ2のSCDに追加されます。レコードがすでに存在する場合、次の手順が実行されます。
プロパティ「デフォルトのオープン・レコード終了時間」で指定した値を設定し、既存のレコードをクローズ済としてマークします。
変更された属性値を使用して新規レコードを作成します。そのレベルの有効日入力がマップされていない場合、演算子のデフォルトの現行レコード有効時間およびデフォルトの現行レコード終了時間プロパティを使用して、有効時間および終了時間が設定されます。そのレベルの有効日入力がマップされている場合は、新規レコードの有効時間が、有効日入力データ・フローから取得された値に設定されます。有効日入力(接続されている場合)は、各新規レコードの実際の有効日を表します。
旧レコードの有効期限は、入力接続に関係なく、デフォルトの現行レコード終了時間プロパティを使用して設定されます。
緩やかに変化するディメンションにデータをロードするには、タイプ2のSCD内の属性にソース属性をマップします。図17-6に、タイプ2 SCDのPRODUCTSレベルにデータをロードするマッピングを示します。
このマッピングでは、レコードの有効時間がソースからロードされます。デフォルトの現行レコード有効時間プロパティを使用して、SYSDATEなどのデフォルト値に設定することも選択できます。
これに加えて、履歴レコードのクローズ日を格納する必要があります。図17-6に示すマッピングでは、終了時間属性がソースからロードされません。デフォルトの現行レコード終了時間プロパティを使用してデフォルト値に設定されます。
レベル・レコードの終了時間または有効時間のデフォルト値を設定する手順は、次のとおりです。
ディメンション演算子で、有効時間および終了時間属性のデフォルト値を設定する必要があるレベルを表すグループを選択します。たとえば、図17-6に示すマッピングでは、ディメンション演算子上の「PRODUCTS」グループを選択します。
「グループのプロパティ」パネルに、選択したレベルのプロパティが表示されます。
デフォルトの現行レコード有効時間を使用して、ロード中のレコードの有効時間として格納する値を指定します。
デフォルトの現行レコード終了時間を使用し、ロード中のレコードの終了時間として格納する値を指定します。
タイプ2のSCDをロードするマッピングでソースの属性をレベルの有効日属性にマップする場合、Warehouse Builderにより次の処理が実行されます
初期レコードのロード中、ソース属性の値が、(タイプ2のSCDにバインドされている)ディメンション演算子の「デフォルトの初期レコード有効時間」プロパティで指定されている値よりも前である場合は、ソースの値がレコードの有効日として使用されます。前ではない場合は、「デフォルトの初期レコード有効時間」プロパティに指定されている値がレコードの有効日として使用されます。
後続レコードのロード中、レコードがバージョン管理されている場合、新しいレコードの有効時間はソースから取得されます。有効時間に値が指定されていない場合、SYSDATE
が使用されます。クローズ済レコードの終了時間は、新しいレコードの有効時間からギャップを引いた値に設定されます。
ソースの属性をレベルの有効日属性にマップしない場合、Warehouse Builderによって次の処理が実行されます。
初期レコードのロード中、「デフォルトの初期レコード有効時間」プロパティに指定されている値がレコードの有効日として使用されます。
後続レコードのロード中、新しいバージョンが作成されている場合、新しいレコードの有効時間がソースから取得されます。有効時間に値が指定されていない場合、SYSDATE
が使用されます。前のバージョンの終了時間は、新しいバージョンの有効時間からギャップを引いた時間になります。
ギャップの詳細は、「Type2 Gap」および「Type2 Gap Units」を参照してください。
注意: レベルの有効期限属性へのマッピングは許可されていません。レコードのロード中、「デフォルトのオープン・レコード終了時間」プロパティが有効期限として使用されます。このプロパティのデフォルト値はNULL です。 |
たとえば、Products
というタイプ2のSCDをロードするマッピングを作成するとします。このタイプ2のSCDのリーフ・レベルであるProduct
が、ソース表からロードされます。ディメンション演算子のプロパティは、次のとおりです。
デフォルトの初期レコード有効時間: 01-jan-2000
デフォルトのオープン・レコード有効時間: SYSDATE
デフォルトのオープン・レコード終了時間: 01-jan-2099
Product
レベルの有効日属性がソース属性EFF_DATE
からマップされます。ソースのProduct
レベルのレコードのEFF_DATE
の値が21-mar-2007であるとします。Product
レベルの初期レコードがロードされるときに、このレコードに格納される有効日は01-jan-2000で、有効期限は01-jan-2099です。このProduct
レベルのレコードが21-mar-2007の後続ロード中にバージョン管理されると、ソース属性の値で「デフォルトのオープン・レコード有効時間」プロパティが上書きされます。新しいProduct
レベルのレコードに格納される有効日は21-mar-2007になり、有効期限は01-jan-2099に設定されます。Product
レベルの初期レコードはクローズされ、有効期限の値は21-mar-2007から「Type2 Gap」値を引いた値に設定されます。
タイプ3のSCDにデータをロード タイプ3のSCDにデータをロードする前に、同じビジネス識別子を持つレコードがタイプ3のSCDに存在するかどうかがチェックされます。レコードが存在しない場合は、追加されます。レコードがすでに存在する場合、次の手順が実行されます。
バージョン属性の値を、バージョン属性の以前の値を格納する属性に移動します。
ソース・レコードの値でレコードを更新します。
図17-7に、タイプ3 SCDのPRODUCTSレベルにデータをロードするマッピングを示します。このマッピングでは、現行レコードの有効時間がソースからロードされます。デフォルトの現行レコード終了時間プロパティを使用して、レベル・レコードの有効時間のデフォルト値を設定することもできます。
バージョン属性の以前の値を表す属性にはデータ・フローをマップできません。たとえば、図17-7に示すマッピングでは、PRODUCTS
レベルのPREV_PACK_SIZE
およびPREV_DESCRIPTION
属性に属性をマップできません。
外部表演算子を使用して、ワークスペースの外部表に格納されているデータをソーシングできます。これにより、この外部表データを別のワークスペース・オブジェクトにロードしたり、データの変換を実行することが可能です。たとえば、外部表に格納されているデータをソーシングし、マッピング演算子を使用してこのデータを変換してから、ディメンションまたはキューブにロードできます。
図17-8に、外部表演算子を使用するマッピングを示します。外部表演算子EXPENSE_CATEGORY_EXT
は、ワークスペースにある同じ名前の外部表にバインドされています。この外部表に格納されているデータを使用して、ディメンションEXPENSE_CATEGORIES
をロードします。
外部表演算子を含むマッピングを作成する手順は、次のとおりです。
外部表演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
「外部表の追加」ダイアログ・ボックスが表示されます。
「外部表の追加」ダイアログ・ボックスを使用して、外部表を作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
外部表演算子の出力グループの属性をターゲット演算子または中間変換演算子にマップします。
オブジェクトの拡張演算子を使用して、オブジェクト・タイプを拡張し、オブジェクト・タイプを構成する個々の属性を取得できます。
オブジェクトの拡張演算子をワークスペース・オブジェクト・タイプにバインドおよび同期化できます。マッピングの生成エラーを回避するため、ワークスペース・オブジェクト・タイプを配布してからマッピングを配布する必要があります。
オブジェクトの拡張演算子には、入力グループと出力グループが1つずつあります。入力グループは、個々の属性を取得するために拡張するオブジェクト・タイプを示します。オブジェクトの拡張演算子をワークスペース・オブジェクトにバインドする場合、演算子の出力グループには、オブジェクト・タイプを構成する個々の属性が含まれます。
オブジェクトの拡張演算子を含むマッピングを正常に配布するには、次の条件が満たされていることを確認します。
ソース表を含むスキーマがウェアハウス・スキーマと同じインスタンス上にあること。
ソース表に対するSELECT権限がウェアハウス・スキーマに付与されていること。
オブジェクトの拡張演算子で使用されるすべてのオブジェクト・タイプおよびネストされた表に対するEXECUTE権限がウェアハウス・スキーマに付与されていること。
図17-9に、オブジェクトの拡張演算子を使用するマッピングを示します。ソース表CUSTOMERS
には、SQLオブジェクト・タイプであるデータ型ADDR_TYPE
のCUSTOMER_ADDRESS
列が含まれています。しかし、ターゲット表CUST
には、Oracle組込みデータ型の4つの異なる列が含まれ、これらには顧客アドレスの各コンポーネントが格納されています。CUSTOMER_ADDRESS
列の個々の属性を取得するには、オブジェクト・タイプADDR_TYPE
にバインドされるオブジェクトの拡張演算子を作成します。次に、CUSTOMER_ADDRESS
列をオブジェクトの拡張演算子の入力グループにマップします。オブジェクトの拡張演算子の出力グループには、CUSTOMER_ADDRESS
列の個々の属性が含まれています。これらの出力属性をターゲット演算子にマップします。
マッピングのオブジェクトの拡張演算子を定義する手順は、次のとおりです。
オブジェクトの拡張演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
「オブジェクトの拡張の追加」ダイアログ・ボックスを使用して、オブジェクトを作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
拡張が必要なソース属性をオブジェクトの拡張演算子の入力グループにマップします。
入力オブジェクト・タイプのシグネチャは、オブジェクトの拡張演算子のシグネチャと同じである必要があります。
オブジェクトの拡張演算子の出力属性をターゲット属性にマップします。
マッピング入力パラメータを使用して、Warehouse Builderの外部情報をマッピングへの入力として取り込むことができます。
たとえば、マッピング入力パラメータ演算子を使用して、データをステージング領域にロードするマッピングにSYSDATEを渡すことができます。このマッピング入力パラメータを使用して、データをターゲットにロードする別のマッピングにタイムスタンプを渡すこともできます。
マッピングを生成すると、PL/SQLパッケージが作成されます。マッピング入力パラメータは、このパッケージのメイン・プロシージャのシグネチャの一部になります。
マッピング入力パラメータのカーディナリティは1です。この場合、次の演算子への入力として別の行セットと組み合せることができる1つの行セットが作成されます。
入力属性の名前は、マッピング出力パラメータの名前になります。マッピング・エディタ内でマッピング入力パラメータ演算子の属性を接続することにより、これらのパラメータを使用できるようになります。1つのマッピングで使用できるマッピング入力パラメータは1つのみです。
マッピング入力パラメータを定義する場合、データ型とオプションのデフォルト値を指定します。
マッピングのマッピング入力パラメータ演算子を定義する手順は、次のとおりです。
マッピング入力パラメータ演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
マッピング入力パラメータ演算子を右クリックし、「詳細をオープン」を選択します。
INPUT_PARAMETERエディタが表示されます。
「出力」タブを選択し、「追加」をクリックして出力属性を追加します。
属性の名前を変更し、データ型やその他の属性のプロパティを定義できます。
「OK」をクリックし、INPUT_PARAMETERエディタを閉じます。
図17-10に示すように、マッピング入力パラメータ演算子の出力属性をターゲット演算子の属性に接続します。
単一のマッピング出力パラメータ演算子を使用して、PL/SQLマッピングの値をWarehouse Builderの外部アプリケーションに送信します。
マッピング出力パラメータ演算子は、SQL*Loaderマッピングでは無効です。マッピングを生成すると、PL/SQLパッケージが作成されます。マッピング出力パラメータは、このパッケージのメイン・プロシージャのシグネチャの一部になります。
マッピング出力パラメータ演算子にあるのは1つの入力グループのみであり、出力グループはありません。1つのマッピングで使用できるのは、1つのマッピング出力パラメータ演算子のみです。マッピング出力パラメータ演算子にマップできるのは、行セットに関連付けられていない属性のみです。たとえば、定数、入力パラメータ、マッピング前プロセスからの出力、またはマッピング後プロセスからの出力にはすべて、行セットに関連付けられていない属性を含めることができます。
マッピングのマッピング出力パラメータ演算子を定義する手順は、次のとおりです。
マッピング出力パラメータ演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
マッピング出力パラメータ演算子を右クリックし、「編集」を選択します。
「入力属性」タブを選択し、「追加」をクリックして入力属性を追加します。
属性の名前を変更し、データ型やその他の属性のプロパティを定義できます。
図17-11に、マッピングに使用されるマッピング出力パラメータ演算子の例を示します。
マテリアライズド・ビュー演算子を使用すると、ワークスペースに格納されているマテリアライズド・ビューからのデータのソーシングやマテリアライズド・ビューへのデータのロードが可能です。
たとえば、マテリアライズド・ビューに格納されているデータを使用してキューブをロードできます。マテリアライズド・ビュー演算子には、INOUTGRP1と呼ばれる入力/出力グループが1つあります。この演算子にはグループを追加できませんが、既存の入力/出力グループには属性を追加できます。
マテリアライズド・ビュー演算子は、ワークスペース表にバインドおよび同期化できます。生成されたコード・パッケージでのエラーを回避するため、ワークスペース・マテリアライズド・ビューを配布してから、マテリアライズド・ビュー演算子を含むマッピングを生成する必要があります。
図17-12に、マテリアライズド・ビュー演算子を使用するマッピングを示します。2つのソース表PRODUCTS
とALL_SALES
は、ジョイナ演算子を使用して結合されます。次に、このデータはアグリゲータ演算子を使用して集計されます。集計されたデータを使用してマテリアライズド・ビューSALES_MV
がロードされます。
マテリアライズド・ビュー演算子を含むマッピングを作成する手順は、次のとおりです。
マテリアライズド・ビュー演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
「マテリアライズド・ビューの追加」ダイアログ・ボックスが表示されます。
「マテリアライズド・ビューの追加」ダイアログ・ボックスを使用して、マテリアライズド・ビューを作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
マテリアライズド・ビュー演算子の属性をマップします。
マテリアライズド・ビュー演算子をターゲットとして使用している場合、ソース属性をマテリアライズド・ビュー演算子の属性に接続します。マテリアライズド・ビュー演算子をソースとして使用している場合、マテリアライズド・ビュー演算子の属性をターゲットに接続します。
順序演算子は、行ごとに増分する順序番号を生成します。
たとえば、順序演算子を使用すると、データをディメンション表にロードするときにサロゲート・キーを作成できます。順序は、ターゲット演算子の入力または他のタイプの演算子の入力に接続できます。順序の出力は、他の演算子からの出力と組み合せることができます。
順序番号は表とは関係なく生成されるため、同じ順序を複数の表に対して使用できます。同じ順序が複数のセッションによって使用される場合があるため、順序番号は連続していない場合があります。
この演算子には、次の出力属性のある出力グループが含まれます。
CURRVAL: 現在の値から生成されます。
NEXTVAL: 次の値から始まり、連続して増分する番号の行セットを生成します。
順序は、いずれかのモジュールのワークスペース順序にバインドおよび同期化できます。生成されたコード・パッケージでのエラーを回避するため、ワークスペース順序を生成および配布してから、順序を含むマッピングを配布する必要があります。詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
順序を含むマッピングは、行ベース・モードを使用して生成してください。行が選択されていなくても順序は増分されます。最後の番号から順序を開始する場合、セット・ベースまたはフェイルオーバー・オペレーティング・モードのセット・ベースでSQLパッケージを実行しないでください。モード設定の構成の詳細は、「ランタイム・パラメータ」を参照してください。
図17-13に、順序演算子を使用して表の主キーを自動的に生成するマッピングを示します。順序演算子のNEXTVAL属性は、ターゲットの入力属性にマップされます。ソース表の他の入力属性は、ターゲットに直接マップされます。
マッピングの順序のマッピング演算子を定義する手順は次のとおりです。
順序演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
「順序の追加」ダイアログ・ボックスが表示されます。
「順序の追加」ダイアログ・ボックスを使用して、順序を作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
必要な出力属性を順序演算子からターゲット属性に接続します。
表演算子を使用すると、ワークスペースに格納されている表からのデータのソーシングや表へのデータのロードが可能です。
表演算子とワークスペース表をバインドして同期化できます。生成されるコード・パッケージにエラーが含まれないようにするため、表演算子を含むマッピングの生成の前にワークスペース表を配布しておく必要があります。
図17-13に、表演算子をソースとターゲットの両方として使用するマッピングを示します。図17-3に、表演算子をターゲットとして使用するマッピングを示します。
マッピングの表演算子を定義する手順は次のとおりです。
表演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
「表の追加」ダイアログ・ボックスが表示されます。
「表の追加」ダイアログ・ボックスを使用して、表を作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
表演算子の属性をマップします。
表をターゲットとして使用している場合、ソース属性を表演算子の属性に接続します。表をソースとして使用している場合、表演算子の属性をターゲットに接続します。
Warehouse Builder 10.2.0.3から、表演算子のマージ最適化プロパティを有効化できるようになりました。このプロパティを「True」に設定すると、MERGE文における式と変換の起動または実行が最適化されます。
たとえば、更新操作のみの対象となる、変換にマップされる列が、ターゲット表に含まれるようなマッピングについて考えます。旧リリースのWarehouse Builderでは、変換が不要な行も含め、すべての行に対して変換を実行していました。このリリースからは、マージ最適化を有効化すると、Warehouse BuilderがMERGE文の更新部分にのみ変換を呼び出すようになりました。
Warehouse Builderを使用すると、データの抽出中およびロード中に一時表を使用できます。リモート・ソースから複数のターゲットにデータを抽出する必要がある場合には、一時表が役立ちます。
一時ステージング表は、ディメンション演算子のサブマッピング拡張によって自動的に生成されるディメンション・ロード・ロジックで使用されます。これで、ターゲット表で参照を行うことにより発生する問題を回避できます。
次に示すプロパティを使用すると、ETLの実行中に一時表を作成できます。
一時ステージ表のプロパティを「True」に設定すると、表演算子に対する既存のバインドはすべて無視されます。一時ステージング表がマッピングとともに配布され、この表演算子からのすべてのロードおよび抽出操作はステージング表から実行されます。
配布された表のデータベース内での名前は演算子名に基づいており、名前の衝突を避けるために一意の識別子が付加されています。マップが削除または再配布されると、表は自動的に削除されます。各マッピングの実行前に、表は自動的に切り捨てられます。
このプロパティをデフォルト値の「False」に設定した場合、このプロパティによる影響はありません。
ネストした表または可変長配列タイプのオブジェクトがある場合、可変長配列イテレータ演算子を使用して、この表タイプの値を反復できます。
この演算子は、表タイプ属性をソースとして受け入れ、ネストした表に定義されているベース要素タイプまたは可変長配列タイプの値を生成します。演算子がバインドされている場合、演算子に対して調整演算が実行されます。バインドされていない可変長配列イテレータ演算子については、調整演算はサポートされていません。
可変長配列イテレータ演算子は、バインドされている演算子またはバインドされていない演算子として作成できます。バインドされていない可変長配列イテレータ演算子は同期化または検証できません。この演算子の入力グループと出力グループは1つずつのみです。他のデータ型の属性を持つ入力グループも使用できます。ただし、少なくとも1つの表タイプ属性が必要です。
出力グループの属性は、入力グループの属性のコピーです。唯一異なるのは、出力グループは、演算子がバインドされている表タイプ(入力グループ属性の1つ)のかわりに、入力グループのベース要素タイプと同じ属性を持つという点です。入力グループは編集できますが、出力グループは編集できません。
マッピングの可変長配列イテレータ演算子を定義する手順は次のとおりです。
可変長配列イテレータ演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
「可変長配列イテレータの追加」ダイアログ・ボックスが表示されます。
「可変長配列イテレータの追加」ダイアログ・ボックスで、バインドされていない演算子またはバインドされている演算子を選択します。
バインドされていない演算子を選択した場合、属性のない可変長配列イテレータ演算子が作成されます。これらの属性は手動で作成する必要があります。
バインドされている演算子を選択した場合、ツリーに表示されていて使用可能なネストした表または可変長配列タイプの1つを選択する必要があります。出力属性はベース要素と同じです。
「OK」をクリックします。
可変長配列イテレータ演算子の属性をマップします。
バインドされていない演算子の場合、マッピング・エディタのキャンバスでバインドされていない可変長配列イテレータ演算子を右クリックし、「詳細をオープン」を選択します。これにより、「可変長配列イテレータ」エディタ・ダイアログ・ボックスが開きます。入力グループに属性を追加するには、「追加」ボタンを使用します。変更できるのは、出力グループの属性のデータ型のみです。
ビュー演算子を使用すると、ワークスペースに格納されているビューからのデータのソーシングやビューへのデータのロードが可能です。
ビュー演算子は、ワークスペース・ビューにバインドおよび同期化できます。生成されたコード・パッケージでのエラーを回避するため、ワークスペース・ビューを配布してから、ビュー演算子を含むマッピングを生成する必要があります。
マッピングのビュー演算子を定義する手順は次のとおりです。
ビュー演算子をマッピング・エディタのキャンバスにドラッグ・アンド・ドロップします。
「ビューの追加」ダイアログ・ボックスが表示されます。
「ビューの追加」ダイアログ・ボックスを使用して、ビューを作成または選択します。これらのオプションの詳細は、「ワークスペース・オブジェクトにバインドする演算子の追加」を参照してください。
ビュー演算子の属性をマップします。
ビューをターゲットとして使用している場合、ソース属性をビュー演算子の属性に接続します。ビューをソースとして使用している場合、ビュー演算子の属性をターゲットに接続します。
マッピングのターゲット演算子は、Oracleのリモート・ロケーションまたはOracle以外のデータベース・ロケーション(SQLサーバーやDB2など)にバインドできます。このような演算子は、Oracle以外のターゲットと呼ばれます。これらのターゲットにアクセスするには、データベース・リンクを使用します。データベース・リンクは、ロケーションを使用して作成されます。SAPにデータを移入するためのABAPは生成できないため、SAPターゲットはサポートされていません。
マッピングでリモート・ターゲットやOracle以外のターゲットを使用する場合、特定の制限が課されます。詳細は、次の各項を参照してください。
マッピングでリモート・ターゲットまたはOracle以外のターゲットを使用する場合、次の制限が適用されます。
ターゲット演算子のロード・タイプのプロパティは「TRUNCATE/INSERT」に設定できません。
このため、マッピングを検証すると、検証エラーが発生します。
Oracle以外のターゲットの場合、ターゲット演算子のロード・タイプのプロパティを「INSERT/UPDATE」に設定すると、ロード・タイプを「INSERT」に設定した場合と同じ結果になります。
DML文でRETURNING句はサポートされません。
RETURNING句を使用すると、行ベース・モードを使用してターゲットにロードされた行のROWIDを取得できます。これらのROWIDは、ランタイム監査システムによって記録されます。ただし、リモート・ターゲットまたはOracle以外のターゲットの場合、RETURNING句は生成されず、ROWIDフィールドについてNULLがランタイム監査システムに渡されます。
セット・ベース・モードの場合、Oracleデータベースのデータはリモート・ターゲットまたはOracle以外のターゲットにはロードできません。セット・ベースのフェイルオーバーを含め、他のすべてのモードはサポートされます。
ターゲット演算子のオペレーティング・モードのプロパティをセット・ベースに設定すると、ランタイム・エラーが発生します。
マッピングでリモート・ターゲットまたはOracle以外のターゲットを使用する場合、特定の制限があるアクティビティに対してはデフォルトの対応策が使用されます。これらの対応策は、情報用としてのみリストされています。これらの対応策を有効にするために、なんらかの作業を明示的に実行する必要はありません。
リモート・ターゲットまたはOracle以外のターゲット用として使用されるデフォルトの対応策は、次のとおりです。
ターゲットのロード・タイプを「INSERT/UPDATE」または「UPDATE/INSERT」(Oracle 9iの場合)、および「UPDATE」(Oracle 10gの場合)に設定すると、このマッピングをセット・ベース・モードで実装するためにMERGEが生成されます。ただし、MERGE文はリモート・ターゲットまたはOracle以外のターゲットに対しては実行できません。このため、マッピングでリモート・ターゲットまたはOracle以外のターゲットを使用する場合、MERGE文なしでコードが生成されます。生成されるコードは、PL/SQL生成モードをOracle8iに設定したときに生成されるものと同じです。
リモート・ターゲットまたはOracle以外のターゲットにロードされるデータベース順序を参照するセット・ベースのDML文の場合、GLOBAL_NAMESパラメータをTRUEに設定する必要があります。マッピング用のコードの生成時にマッピングにリモート・ターゲットまたはOracle以外のターゲットが含まれる場合、このパラメータはTRUEに設定されます。
リモート・ターゲットまたはOracle以外のターゲットへの複数表挿入の場合、複数表挿入文ではなく、INSERT文が表ごとに生成されます。
リモート・データベースまたはOracle以外のデータベースへのバルク挿入の実行時に、バルク処理コードは生成されません。かわりに、一度に1行ずつ処理するコードが生成されます。つまり、演算子のバルク生成プロパティは無視されます。
注意: リモート・ターゲットまたはOracle以外のターゲットで使用されるロード・タイプは、他のOracleターゲット演算子で使用されるものと同じです。ロード・タイプのプロパティの詳細は、「Oracleターゲット演算子のロード・タイプ」を参照してください。 |
フラット・ファイル演算子を使用すると、フラット・ファイルをマッピングのソースまたはターゲットとして使用できます。
フラット・ファイル演算子のプロパティは、ソースとターゲットのいずれかとして設定できます。フラット・ファイルのロード・タイプおよび1行目のフィールド名を設定できます。他のすべての設定は読取り専用であり、フラット・ファイルをインポートした方法によって異なります。図17-15に示すような演算子のプロパティ・ウィンドウが表示されます。
リストからロード・タイプを選択します。
挿入: 新規ターゲット・ファイルを作成します。既存のターゲット・ファイルがある場合、以前のファイルは新規に作成したファイルで置き換えられます。
更新: ターゲット・ファイルが存在しない場合は新規ターゲット・ファイルを作成します。既存のターゲット・ファイルが存在する場合は、そのファイルが追加されます。
なし: ターゲット・ファイルのデータ上では操作は実行されません。この設定は、テスト目的の使用に役立ちます。ターゲットに影響することなく、すべての変換および抽出が実行されます。
演算子の1行目のフィールド名を書き込む場合、このプロパティをTRUEに設定します。それ以外の場合は、Falseに設定します。
フラット・ファイル演算子は、ソースまたはターゲットとして使用できます。
ただし、同じマッピング内ではソースとターゲットは相互排他的です。フラット・ファイルのソースとターゲットでは、コード生成言語が異なります。このため、マッピングでは、制限付きでフラット・ファイル、リレーショナル・オブジェクトおよび変換が混在する場合があります。この項で詳述します。
フラット・ファイル演算子には、次のオプションがあります。
前にインポートしたフラット・ファイルの使用
マッピングへの新規フラット・ファイルのインポートおよびバインド
マッピングでの新規フラット・ファイルのソースまたはターゲットとしての定義
フラット・ファイルのデータは、フラット・ファイル演算子または外部表演算子を使用してマッピングに取り込むことができます。大量のデータをロードする場合、フラット・ファイルにロードすることにより、DIRECT PATH SQL*Loaderオプションを使用できるようになり、パフォーマンスが向上します。
大量のデータをロードしない場合、外部表機能で使用可能な多くのリレーショナル変換を利用できます。詳細は、「外部表演算子とフラット・ファイル演算子」を参照してください。
ソースとして使用する場合、フラット・ファイル演算子は、SQL*Loaderユーティリティを使用してフラット・ファイルからデータを読み取る行セット・ジェネレータとして機能します。フラット・ファイル・ソース演算子は、フラット・ファイル・ターゲットまたは外部表へのマップ用としては使用しないでください。フラット・ファイル・ソース演算子を使用してマッピングを設計する場合、次の演算子を使用できます。
外部表演算子を除くその他のリレーショナル・ターゲット・オブジェクト
注意: 順序、式または変換演算子を使用する場合、SQL*Loaderの直接ロード設定は構成パラメータとして使用できません。 |
マッピングでフラット・ファイルをソースとして使用する場合、マッピングを正常に配布するために、フラット・ファイル・ソースからリレーショナル・ターゲットへのコネクタを必ず作成してください。
フラット・ファイル・ターゲットを使用したマッピングでは、データを表の行にロードするのではなく、データをフラット・ファイルにロードするPL/SQLパッケージが生成されます。
注意: 1つのマッピングは、1回に最大50のフラット・ファイル・ターゲット演算子を含むことができます。 |
既存のフラット・ファイルは、レコード・タイプが単一でも複数でも使用できます。複数のレコード・タイプのフラット・ファイルをターゲットとして使用する場合、1つのレコード・タイプに対してのみマップできます。同じソースのフラット・ファイルのすべてのレコード・タイプをロードする場合、同じフラット・ファイルをターゲットとしてマッピングに再ドロップし、別のレコード・タイプにマップできます。この例は、「SQL*Loaderマッピングにおける参照整合性の保証へのダイレクト・パス・ロードの使用」を参照してください。または、ロードするレコード・タイプごとに異なるマッピングを作成してください。
新規フラット・ファイル・ターゲットを作成する方法は、「新規フラット・ファイル・ターゲットの作成」を参照してください。