垂直フラット化
オブジェクトの配列を、個別のテーブルのように取得することが可能です。例えば、restaurants テーブルから次のJSON 構造を取得します。
{ "restaurantid" : "30075445", "address" : { "building" : "1007", "coord" : [-73.856077, 40.848447], "street" : "Morris Park Ave", "zipcode" : "10462" }, "borough" : "Bronx", "cuisine" : "Bakery", "grades" : [{ "date" : 1393804800000, "grade" : "B", "score" : 2 }, { "date" : 1378857600000, "grade" : "A", "score" : 6 }, { "date" : 1358985600000, "grade" : "A", "score" : 10 }], "name" : "Morris Park Bake Shop" }垂直フラット化では、以下の構文を使用することでgrades 配列を別々のテーブルとして取得することを許可します。
SELECT * FROM [restaurants.grades]このクエリは、次のデータセットを返します。
date | grade | score | _index |
1393804800000 | B | 2 | 1 |
1378857600000 | A | 6 | 2 |
1358985600000 | A | 10 | 3 |
SELECT * FROM [restaurants.cuisine.bakery.grades]また、ネスト構造にさらに上の階層の配列が含まれている場合もあります。次のJSON を例として考えてみましょう。
{ "restaurantid" : "30075445", "reviews": [ { "grades": [ { "date": 1393804800000, "score": 2, "grade": "B" }, { "date": 1378857600000, "score": 6, "grade": "A" }, { "date": 1358985600000, "score": 10, "grade": "A" }] }], "name" : "Morris Park Bake Shop" }この構造では、reviews 配列のインデックスを角かっこで囲む必要があります。SQL クエリですでにエスケープ文字列として使用されている場合は、以下のクエリのように、角かっこ自体をエスケープする必要があります。
SELECT * FROM [restaurants.reviews.\[0\].grades]このクエリは、上部のJSON 構造と同じデータセットを返します。この構文は大文字小文字を区別しますので、フィールド名はDynamoDB に保存されているのと同じように記述するよう注意してください。