SELECT句を使う
SELECT句は、クエリーの結果として返されるエレメントを定義するために使われます。
SELECTキーワードに後続できるものは以下の通りです:
- 単一値、レコード、配列のいずれかを返す単純式または条件式です。
SELECT expression
- キー/値ペアを返すブロック。単純識別子または代入式を使えば、新しいキーを作成できます。値として使用する式は単純式または条件式となります。
SELECT { identifier, identifier = expression }
- 親クエリーの結果内でネスト化された結果を返す、括弧の間のサブクエリー:
SELECT ( FROM identifier1 SELECT { identifier2, identifier3 } )
- 括弧で囲まれたサブクエリーに後続されて、1つのレコード内にある複数のクエリーの結果を返す識別子:
SELECT { identifier1 = (query1), identifier2 = (query2) }
情報メモ注: 識別子のみを使用する時に、入力内にエレメントが参照されます。出力フィールド名は入力フィールド名と同じになります。
配列を生成するサブクエリーでは、配列から特定のアイテムを返すインデックスを指定できます。インデックスは、サブクエリーの閉じ括弧の後にあると、括弧で囲まれる必要があります。
SELECT ( FROM identifier1 SELECT { identifier2 } )[index]
たとえば次の入力データでは:
{
"customers": [
{
"firstName": "John",
"lastName": "Smith",
"address": {
"street": "690 River St.",
"city": "Hanover, MA",
"zipcode": "02340"
},
"orders": [
{
"order_id": "abc-12345",
"items": [
{
"item_id": "97516848-jiargn",
"quantity": 2
}
]
}
]
},
{
"firstName": "Jane",
"lastName": "Doe",
"address": {
"street": "420 Green St.",
"city": "Boston, MA",
"zipcode": "02115"
},
"orders": [
{
"order_id": "def-12345",
"items": [
{
"item_id": "97516848-kftesn",
"quantity": 3
},
{
"item_id": "96946848-metasb",
"quantity": 1
}
]
}
]
}
]
}
ネスト化されたクエリーを含むSELECT句を使用して、顧客名の配列とアイテムIDの配列内にある1番目の項目を含むレコードを返すことができます。
SELECT {
customers = (
FROM customers AS c
SELECT {
name = concatWith(" ", c.firstName, c.lastName),
c.address
}
),
items = (
FROM customers AS c UNNEST c.orders AS o UNNEST o.items AS i
SELECT {i.item_id}
)[0]
}
このクエリーは次の結果を返します:
{
"customers": [
{
"name": "John Smith",
"address": {
"street": "690 River St.",
"city": "Hanover, MA",
"zipcode": "02340"
}
},
{
"name": "Jane Doe",
"address": {
"street": "420 Green St.",
"city": "Boston, MA",
"zipcode": "02115"
}
}
],
"items": {
"item_id": "97516848-jiargn"
}
}