フリーフォームクエリ
自動スキーマ検出 の説明にあるとおり、直感的なテーブルスキーマは非構造化 データへの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 オブジェクトです。
{
"people": [
{
"personal": {
"age": 24,
"gender": "F",
"name": {
"first": "Jane",
"last": "Roberts"
}
},
"vehicles": [
{
"type": "car",
"model": "Toyota Camry",
"insurance": {
"company": "Car Insurance",
"policy_num": "98765"
},
"maintenance": [
{
"date": "05-11-2017",
"desc": "tires rotated"
},
{
"date": "11-03-2017",
"desc": "oil change"
}
]
},
{
"type": "car",
"model": "Honda Accord",
"insurance": {
"company": "Car Insurance",
"policy_num": "98765"
},
"maintenance": [
{
"date": "10-07-2017",
"desc": "new air filter"
},
{
"date": "01-13-2018",
"desc": "new brakes"
}
]
}
],
"source": "phone"
}
]
}
接続文字列
次の接続文字列を使用すると、connector はネストされたデータをパースしません。データはクエリを実行すると処理されます。トップレベルオブジェクトのプロパティは、デフォルトのFlattenObjects 機能によって変わらずフラット化されます。 ネストされたデータはJSON の集計として返されます。
URI=C:\people.txt;DataModel=Document;JSONPath='$.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 |