フリーフォームクエリ
自動スキーマ検出 の説明にあるとおり、直感的なテーブルスキーマは非構造化XML データへのSQL アクセスを可能にします。スキーマのカスタマイズ では静的なテーブルを定義でき、データのリレーショナルビューでの緻密な制御を可能にします。例えば、報告されたデータ型を変更することができます。ただし、データのスキーマのビューに限定されるわけではありません。
どんなネストされた構造でもデータをフラット化せずにクエリできます。自動スキーマ検出 を介してアクセスできるあらゆるリレーションへは、アドホックなSQL クエリを使ってもアクセスが可能です。
拡張された射影構文
次のクエリのように、SELECT 句で、ドット表記を使用してデータへのXPath を指定します。
SELECT [personal.name.last], [personal.name.first], [vehicles.1.type], [vehicles.1.model] FROM people WHERE [personal.name.last] = 'Roberts' AND [personal.name.first] = 'Jane'
特定の配列要素へのパスを指定するには、要素の順序位置を指定します。配列のインデックスはゼロオリジンなので、上記のクエリは2番目の車両を取得します。
例
上記のクエリは、サンプルのRaw データ のpeople ドキュメントからカラム名を引きます。以下はpeople 配列からのperson オブジェクトです。
<?xml version="1.0" encoding="utf-8"?>
<root>
<rootAttr1>rootValue1</rootAttr1>
<people>
<personal>
<age>20</age>
<gender>M</gender>
<name>
<first>John</first>
<last>Doe</last>
</name>
</personal>
<jobs>support</jobs>
<jobs>coding</jobs>
<vehicles>
<type>car</type>
<model>Honda Civic</model>
<insurance>
<company>ABC Insurance</company>
<policy_num>12345</policy_num>
</insurance>
<features>sunroof</features>
<features>rims</features>
<maintenance>
<date>07-17-2017</date>
<desc>oil change</desc>
</maintenance>
<maintenance>
<date>01-03-2018</date>
<desc>new tires</desc>
</maintenance>
</vehicles>
<vehicles>
<type>truck</type>
<model>Dodge Ram</model>
<insurance>
<company>ABC Insurance</company>
<policy_num>12345</policy_num>
</insurance>
<features>lift kit</features>
<features>tow package</features>
<maintenance>
<date>08-27-2017</date>
<desc>new tires</desc>
</maintenance>
<maintenance>
<date>01-08-2018</date>
<desc>oil change</desc>
</maintenance>
</vehicles>
<addresses>
<type>work</type>
<zip>12345</zip>
</addresses>
<addresses>
<type>home</type>
<zip>12357</zip>
</addresses>
<source>internet</source>
</people>
</root>
接続文字列
次の接続文字列を使用すると、本製品 はネストされたデータをパースしません。データはクエリを実行すると処理されます。トップレベルオブジェクトのプロパティは、デフォルトのFlattenObjects 機能によって変わらずフラット化されます。 ネストされたデータはXML の集計として返されます。
URI=C:\people.txt;DataModel=Document;XPath='/root/people;'
クエリ
Raw データ ドキュメントのあらゆるネスト構造にカラムとしてアクセスできます。
SELECT [personal.name.last], [personal.name.first], [vehicles.1.type], [vehicles.1.model] FROM people WHERE [personal.name.last] = 'Roberts' AND [personal.name.first] = 'Jane'
配列のインデックスはゼロオリジンです。上記のクエリでは、サンプルperson のsecond vehicle を取得します。
結果
先のクエリは、次の結果を返します。
カラム名 | データ型 | サンプル値 |
personal.name.first | String | Jane |
personal.name.last | String | Roberts |
vehicles.1.type | String | car |
vehicles.1.model | String | Honda Accord |