トップレベルのドキュメントモデル
JSON データのトップレベルドキュメントビューを使用すると、トップレベルのエレメントにすぐにアクセスできます。本製品 は、集計にネストされたエレメントを単一のカラムとして返します。
考慮すべき一つの側面はパフォーマンスです。ネストされたエレメントを処理してパースする時間とリソースを控えます。本製品 は、JSON データを読み込むためにストリーミングを使用して、返されたデータを一度パースします。もう一つ考慮すべきは、ネストされた親エレメントに格納されているデータにアクセスする必要があることと、ツールやアプリケーションがJSON を処理する能力です。
トップレベルドキュメントビューのモデリング
DataModel が"Document"(デフォルト)に設定されている場合、本製品 はデフォルトでトップレベルのオブジェクト配列である単一のオブジェクト配列のみをスキャンします。デフォルトのオブジェクトフラット化により、トップレベルのオブジェクトエレメントはカラムとして利用可能です。ネストされたオブジェクト配列は、集計されたJSON として返されます。
JSONPath を設定すると、トップレベル以外のオブジェクト配列を指定できます。
例
以下は、Raw データ のサンプルドキュメントに基づいたサンプルクエリとその結果です。クエリの結果、JSON パス"$.people" に基づいた単一の"people" テーブルが作成されます。
接続文字列
DataModel 接続プロパティを"Document" に設定して次のクエリを実行し、サンプル結果セットを表示します。本製品 は以下のJSONPath 値のみをスキャンします。
URI=C:\people.txt;DataModel=Document;JSONPath='$.people';
クエリ
次のクエリは、トップレベルのオブジェクトエレメントと車両配列を結果にプルします。
SELECT
[personal.age] AS age,
[personal.gender] AS gender,
[personal.name.first] AS name_first,
[personal.name.last] AS name_last,
[source],
[vehicles]
FROM
[people]
結果
データのドキュメントビューでは、パーソナルオブジェクトが4カラムにフラット化され、ソースと車両エレメントが個別のカラムとして返され、結果として6カラムのテーブルが作成されます。
age | gender | name_first | name_last | source | vehicles | |
20 | M | John | Doe | internet | [{"type":"car","model":"Honda Civic","insurance":{"company":"ABC Insurance","policy_num":"12345"},"maintenance":[{"date":"07-17-2017","desc":"oil change"},{"date":"01-03-2018","desc":"new tires"}]},{"type":"truck","model":"Dodge Ram","insurance":{"company":"ABC Insurance","policy_num":"12345"},"maintenance":[{"date":"08-27-2017","desc":"new tires"},{"date":"01-08-2018","desc":"oil change"}]}]
| |
24 | F | Jane | Roberts | phone | [{"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"}]}]
|
関連項目
- 自動スキーマ検出:水平フラット化を使用してカラム検出を設定します。
- フリーフォームクエリ:ドット表記を使用して、ネストされたデータを選択します。
- 垂直フラット化:ネストされたオブジェクト配列に別のテーブルとしてアクセスします。
- JSON 関数:クライアント側の集計と変換を実行するために返されたデータを操作します。