[ODI] Oracle Data Integrator 11.1.1.5 Complex Files as Sources and Targets

概要
ODI 11.1.1.5に新しくComplex Fileテクノロジーが追加され、既存のODI Fileテクノロジーでは扱いきれなかったファイル構造に対応できるようになりました。
  • 一つのリスト中に様々なレコード型で種々のパースルールを使うことができる
  • 階層リスト(例:お客様に紐付く複数の注文)
  • ファイルデータのパース方法の指定(デリミタの種類、フィールド長、型識別子)
  • 複雑なヘッダ(複数行のヘッダ、パース可能な情報を含むヘッダ)
  • 行の読み飛ばし
  • 条件付き(選択)フィールド
ファイル、XMLファイルと同じく、Complex Fileの処理においてもJDBCドライバを使って1対1もしくは1対多のテーブル構造にマッピングします。テーブルの結果セットには、主キーや外部キーを追加して階層構造を表現し、順序値によりファイルの順序を維持しています。


Complex Fileの処理には、nXSD(native XSD)フォーマットを使います。これはOracle BPEL PMで既に使われているもので、XMLスキーマ標準を拡張して種々の属性を追加したものです。このnXSDを使い、内部的にXML形式にします。XMLは性能向上のためにストリーミングされています。その結果、メモリサイズの制限に伴うネイティブファイルのサイズ上限はありませんし、XMLデータは完全に実体化されないのです。内部XMLは、ODI XMLドライバと同じマッピング規則使用してリレーショナルスキーマに変換します

nXSDファイルの作成方法
Complex FileモデルはnXSDスキーマに依存します。このnXSDファイルはテキストエディタもしくJDeveloperに含まれるネイティブフォーマットビルダを使って作成します。nXSDフォーマットは標準のXSDフォーマットをnxsd属性をつけて拡張したものです。

以下がNXSDスキーマのサンプルです。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
   elementFormDefault="qualified"
            xmlns:tns="http://xmlns.oracle.com/pcbpel/demoSchema/csv"
      targetNamespace="http://xmlns.oracle.com/pcbpel/demoSchema/csv"
 attributeFormDefault="unqualified"
        nxsd:encoding="US-ASCII"
          nxsd:stream="chars"
         nxsd:version="NXSD">
  <xsd:element name="Root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Header">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Branch" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy=","/>
              <xsd:element name="ListDate" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="Customer" maxOccurs="unbounded">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="Name" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy=","/>
          <xsd:element name="Street" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy=","/>
          <xsd:element name="City" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
  </xsd:element>
</xsd:schema>
nXSDスキーマはフラットファイルに位置や区切り文字を表現するための要素に注釈をつけます。先の例のスキーマでは nxsd:terminatedBy を使って次の終端文字を探しています。nXSDには固定長フィールドの解析、文字列出現に対応するためのドキュメント先読み、条件付きロジックの実行、状態保持のための変数使用などといった種々の構成要素があります。


nXSDファイルはXMLスキーマエディタを使って編集したり、Native Format Builderで作成することができます。Native Format Builder WizardおよびnXSD言語については以下のURLを参照して下さい。

Oracle® Fusion Middleware User's Guide for Technology Adapters 11g Release 1 (11.1.1.5.0)

Native Format Builder Wizard
http://download.oracle.com/docs/cd/E21764_01/integration.1111/e10231/nfb.htm

[訳注]
このエントリを翻訳した時点では、日本語版は11.1.1.4のみです。

Oracle® Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド 11g リリース1 (11.1.1.4.0)
http://download.oracle.com/docs/cd/E23549_01/integration.1111/b55918/nfb.htm

BPELもしくはMediatorでNative Format Builderが出てくるのは、File Adapterのアダプタ構成ウィザードの8番目の工程(下図)です。この段階でネイティブフォーマットのスキーマを作成します。


Native Format Builderは、サンプルのネイティブファイルを基にnXSDを生成する多くの手順をガイドします。フォーマットが複雑な場合は簡単なフォーマットで”おおよそ”のあたりをつけておき、複雑なコンポーネントを後でつけていくという考え方もありです。その結果得られる *.xsdファイルをコピーして、ODIや他のBPELでも使うことができます。

上の例のnXSDスキーマは、データを含むヘッダ行とコンマ(,)で区切られている3個の文字列を含むファイルを表現しています。例えばこんなファイルです。
Redwood City Downtown Branch, 06/01/2011
Ebeneezer Scrooge, Sandy Lane, Atherton
Tiny Tim, Winton Terrace, Menlo Park

ODI Complex File JDBCドライバは、主キー・外部キーの関係を使い、リレーショナルテーブルの組み合わせによってファイル構造を掘り起こします。以下の表を例に説明します。

ROOT表 (1行):
ROOTPK ルート要素の主キー
SNPSFILENAME ファイル名
SNPSFILEPATH ファイルパス
SNPSLOADDATE ロードする日

HEADER表 (1行):
ROOTFK ROOTレコードの外部キー
ROWORDER ネイティブドキュメントの行の順序
BRANCH データ
BRANCHORDER 行内のBranchの順序位置
LISTDATE データ
LISTDATEORDER 行内のListDateの順序位置

ADDRESS表 (2行):
ROOTFK ROOTレコードの外部キー
ROWORDER ネイティブドキュメントの行の順序
NAME データ
NAMEORDER 行内のNameの順序位置
STREET データ
STREETORDER 行内のStreetの順序位置
CITY データ
CITYORDER 行内のCityの順序位置
各テーブルにはリレーションシップを介して文書の階層を反映するために主キーや外部キーのフィールドがあります。この例は、HEADERとすべてのCUSTOMERレコードがROOTの主キーを指しています。深くネストした文書では、親要素を識別する必要があります。また、すべてのテーブルにはROWORDER(行の順序)フィールドがあり、列の順序を定めています。列の順序が元のドキュメントと異なり、維持する必要がある場合は、各フィールドの順序を定めるフィールドも存在します。順番は関係ない場合、これらのフィールドは無視できます。

Complex Fileデータサーバを作成するには
nXSDファイル、テストデータファイルを作成し、ODIからアクセスできるローカルファイルシステムにファイルを配置したら、ODIのトポロジーナビゲータにて、Complex Fileテクノロジーの中でデータサーバ、物理スキーマを作成できます。

このテクノロジーは、他のODIのテクノロジーの規則に従っています。そしてXMLテクノロジーと非常によく似ています。ソースのネイティブファイル、NXSDスキーマファイル、ルート要素だけでなく、外部のデータベースといった構文解析の設定をJDBCのURLに設定することができます。
dbpropsを用いて外部データベースの設定をすることもできます。本番環境ではdbpropsを使うことを強く推奨します。理想的には、ステージングデータベースを使うべきでしょう。また、Complex Fileを読み込み目的で排他制御する場合、 ro=true プロパティを設定し、セッションを閉じた際にデータベースからの書き戻しによる同期を避けることを推奨します。設計時には、 filename に指定したパスにデータファイルが常に存在する必要があります。このファイルがないと、接続のテスト、モデルデータの読み込み、モデルのリバースエンジニアリングといったオペレーションは失敗します。

Complex File JDBCドライバのすべてのプロパティは以下にまとめられてます。

Oracle® Fusion Middleware Connectivity and Knowledge Modules Guide for Oracle Data Integrator
11g Release 1 (11.1.1)
Oracle Data Integrator Driver for Complex Files Reference
http://download.oracle.com/docs/cd/E21764_01/integrate.1111/e12644/appendix_complex_driver.htm

Complex Fileデータサーバの作成方法を紹介するすばらしいViewletを、David Allanが作成してくれています。以下のURLからご覧下さい。
http://blogs.oracle.com/dataintegration/entry/complex_file_processing_0_to

Complex Fileスキーマに基づいたモデルの作成するには
物理スキーマ、論理スキーマを作成したら、データベースの場合のようにComplex Fileを使ってモデルを作成することができます。モデルをリバースエンジニアリングして、各XSD要素のデータストア(表)を作成します。Complex Filesをソースデータとして使う場合は容易ですが、ターゲットデータとして使う場合、XMLファイルの場合と同様に、すべての依存関係がある表の主キー・外部キーの組み合わせが正しいことを確認する必要があります。

デバッグ、エラー処理

nXSDファイルには種々のテスト方法があります。Native Format Builder WizardはnXSDを作成していなくてもテストでき、スキーマやテストデータに関連する問題を示してくれます。ODIではデータサーバへの接続テスト時にテスト用XMLファイルをnXSDで解析、実行できます。nXSDにエラーがあったり、データがスキーマに準拠していない場合は、エラーが表示されます。
以下はエラーメッセージの例です。
Error while reading native data.
[Line=1, Col=5] Not enough data available in the input, when trying to read data of length "19" for "element with name D1" from the specified position, using "style" as "fixedLength" and "length" as "". Ensure that there is enough data from the specified position in the input.

Complex FileのFAQ
処理可能なネイティブファイルのサイズはマシンのメモリによって制限されますか?
いいえ、ネイティブデータはドライバ中を流れるので、ステージング領域で利用可能なスペースはデータのサイズによってのみ制限されます。フィールドサイズ個々に制限がありますが、LOBフィールドは、メモリに収まる必要があります。

ODIファイルドライバではなく、Complex Fileドライバをいつも使うべきなのでしょうか?
いいえ、固定長ファイル、区切り文字付き可変長ファイルなど、一つの表にマッピングできるシンプルなファイルであれば、ファイル用のJDBCドライバを使って下さい。ODIのファイルドライバは構成が簡単で、だいるデータをデータベースに書き込まずにストリーミングできます。Complex Fileドライバを使うのは、通常のファイルドライバが使えない場合に限定すべきです。

データベースにデータを書き込む前にフラットファイルからXMLを生成するのですか?
フラットファイルを解析してXMLをメモリにもディスクにも実体化しません。XMLパーサで作成されたデータはJavaオブジェクト内をストリーミングしているだけです。XSDから派生したnXSDスキーマをデータ型として使っています。Oracle Fusion Middlewareでは複合フラットファイルメタデータを表現するための標準としてnXSDスキーマを使っています。そのため、複数の製品にまたがってスキーマを共用できます。

nXSDファイルはSOA Suiteと互換性がありますか
はい、ODIはSOA Suiteと同じnXSDファイルを利用できます。混在する利用形態で同じデータフォーマットを利用できます。

ODI StudioからNative Format Builderを起動できますか
いいいえ、Native Format BuilderはJDeveloperから起動する必要があります。BPELをSOA Suiteのバンドルとして入手できます。SOA Suiteをお持ちでないお客様はXSDエディタを使って手動でnXSDファイルを作成することができます。

どのタイミングでネイティブファイルにデータベースのデータを書き戻すのでしょうか
データはSYNCHRONIZEとCREATE FILEコマンドを使って同期するか、JDBC接続が閉じるタイミングで書き戻します。ファイルを排他的に利用して書き戻しが発生しないようにするため、 ro もしくはread_only プロパティを true にすることを推奨します。

nXSDメタデータはODIのマスタリポジトリもしくはワークリポジトリの一部ですか
いいえ、マスタリポジトリ中のデータサーバ定義にはJDBCのURLとファイルパスのみ含みます。nXSDファイルは、JDBCドライバがアクセスできる場所に存在する必要があります。

サンプルのnXSDファイルはどこにありますか。
Technology Adapter Users GuideにnXSDのサンプルがあります。

Oracle® Fusion Middleware User's Guide for Technology Adapters 11g Release 1 (11.1.1.5.0)
Native Format Builder Wizard
http://download.oracle.com/docs/cd/E21764_01/integration.1111/e10231/nfb.htm


原文はこちら。
http://blogs.oracle.com/dataintegration/entry/oracle_data_integrator_11_1

0 件のコメント:

コメントを投稿