UNNEST
句を使って、ネストされたコレクションのネストを解除し、その親コレクションに結合します。
UNNEST
キーワードは、ネストされたコレクションの識別子に後続される必要があります。親のFROM
句またはUNNEST
句で指定された内包コレクションの子であることが必要です。FROM parent_identifier UNNEST child_identifier
UNNEST
句でAS
キーワードとINDEX
キーワードを使用したり、複数の連続するUNNEST
句を置いたりできます。
エイリアスのないUNNEST
句を1つ以上使う時に、クエリーで使用されている識別子はすべて、最後のUNNEST
句またはクエリー内の識別子が最後の句の一部ではない場合は、その親の句にある識別子の相対パスとして扱われます。
たとえば次の入力データでは:
{
"customers":[
{
"name":"John Smith",
"orders":[
{
"id":"abc-12345",
"items":[
{
"id":"97516848-jiargn",
"quantity":2
}
]
}
]
},
{
"name":"Jane Doe",
"orders":[
{
"id":"def-12345",
"items":[
{
"id":"97516848-kftesn",
"quantity":3
},
{
"id":"96946848-metasb",
"quantity":1
}
]
}
]
}
]
}
UNNEST
句を2つ使って、同じレベル上のcustomers
コレクション、orders
コレクション、items
コレクション内にあるデータを取得できます。FROM customers UNNEST orders AS o UNNEST items AS i
SELECT {
customer_name = name,
order_id = o.id,
item_id = i.id,
item_quantity = quantity
}
name
という識別子とquantity
という識別子が一意であるため、コレクションエイリアスでプレフィックスを付ける必要がありません。しかし、orders
コレクションとitems
コレクションの両方にid
エレメントが含まれるため、エイリアスを使って、どちらが返されるべきかを指定する必要があります。このクエリーは次の結果を返します:[
{
"customer_name":"John Smith",
"order_id":"abc-12345",
"item_id":"97516848-jiargn",
"item_quantity":2
},
{
"customer_name":"Jane Doe",
"order_id":"def-12345",
"item_id":"97516848-kftesn",
"item_quantity":3
},
{
"customer_name":"Jane Doe",
"order_id":"def-12345",
"item_id":"96946848-metasb",
"item_quantity":1
}
]