自動スキーマ検出
デフォルトでは、connector は配列内の一連のXML オブジェクトを調べ、自動的にリレーショナルスキーマを提案します。このセクションでは、これらの動的スキーマを設定するために使用できる接続プロパティについて説明します。
テーブルの検出
このセクションでは、行スキャンを微調整することによって検出されたスキーマを微調整する方法を示します。 検出される行は、RowScanDepth、DataModel、およびXPath プロパティに依存します。
- RowScanDepth:この設定は、列を検索してカラムを検出するためにスキャンするオブジェクト配列の数を指定します。このプロセスは、ネストされたオブジェクトに従って1つのオブジェクト配列を1行として数えます。
- DataModel:オブジェクト配列をテーブルとしてどのように表示するかを選択します。 この設定はまた、スキャンされるオブジェクトにも影響します。Relational およびFlattenedDocuments 設定では、RowScanDepth アイテム内のすべてのオブジェクト配列(ネストされたものを含む)が検索されます。Document 設定では、最初のオブジェクト配列のみが検索されます。
- XPath:公開するオブジェクト配列を明示的に指定します。DataModel がDocument に設定されている場合は、最上位のXPath を1つしか設定できないことに注意してください。さまざまなXPath 値を持つサンプルドキュメントにアクセスする例については、階層データの解析 を参照してください。
カラムの検出
検出プロセスで特定されるカラムはFlattenArrays およびFlattenObjects プロパティに依存します。FlattenObjects が設定されている場合(これがデフォルトです)、ネストされたオブジェクトは連続したカラムにフラット化されます。
例えば、次のドキュメントを考えましょう。
<company>
<id>12</id>
<name>Lohia Manufacturers Inc.</name>
<address>
<street>Main Street</street>
<city>Chapel Hill</city>
<state>NC</state>
</address>
<office>Chapel Hill</office>
<office>London</office>
<office>New York</office>
<annual_revenue>35,600,000</annual_revenue>
</company>
デフォルトのオブジェクトフラット化では、このドキュメントは次のカラムで表されます:
カラム名 | データ型 | サンプル値 |
id | Integer | 12 |
name | String | Lohia Manufacturers Inc. |
address.street | String | Main Street |
address.city | String | Chapel Hill |
address.state | String | NC |
office | String | <office>Chapel Hill</office><office>London</office><office>New York</office> |
annual_revenue | Double | 35,600,000 |
FlattenObjects が設定されていない場合、address.street、address.city、およびaddress.state カラムは別々にはなりません。文字列型の住所カラムは一つのオブジェクトとして表されます。値は次のようになります:
<address><street>Main Street</street><city>Chapel Hill</city><state>NC</state></address>
FlattenArrays プロパティは配列の値をフラット化してそれぞれのカラムとするために使われます。これは、以下のoffice 配列の例のように、短い配列の場合にのみ推奨されます。
<office>London</office>
<office>Los Angeles</office>
FlattenArrays プロパティは2に設定して上の配列を次のように表すことができます:
カラム名 | データ型 | サンプル値 |
office.0 | String | London |
office.1 | String | Los Angeles |
アンバウンドの配列をそのままにしておき、必要な際にXML 関数 を使ってデータを取り出すことをお勧めします。