У меня есть секционированная таблица datetime в BigQuery со схемой вроде:
timestamp TIMESTAMP REQUIRED
customer_id STRING REQUIRED
plant_id STRING REQUIRED
inverters RECORD REPEATED
inverters. id STRING REQUIRED
...
Итак, если я сделаю SELECT * FROM
my_table`, она сгенерирует JSON со структурой, подобной:
[
{
"timestamp": "2019-10-20 20:00:00 UTC",
"customer_id": "5d3f1aee5f70740d54c416e1",
"plant_id": "5d658cb25f70747626153e83",
"inverters": [
{
"id": "5d77e3225f70746ec02bd8e7",
...
},
...
]
},
...
]
И этот формат хорошо работает в большинстве моих случаев использования, кроме одного.
Итак, если бы я хотел идентификаторы всех инверторов, я бы сделал
SELECT DISTINCT id
FROM `my_table`
CROSS JOIN UNNEST(inverters)
Но мне также нужны временные метки, сгруппированные по инвертору, но если я сделаю, скажем, вложенный запрос для получения временных меток по id, например:
SELECT inverter, timestamp
FROM (
SELECT DISTINCT id
FROM `my_table`
CROSS JOIN UNNEST(inverters)
) AS inverter, `my_table`
, тогда результирующий json будет :
[
{
"inverter": {
"id": "5d791a505f70744c233b819d"
},
"timestamp": "2020-01-21 11:15:00 UTC"
},
{
"inverter": {
"id": "5d791a505f70744c233b819d"
},
"timestamp": "2020-01-21 00:20:00 UTC"
},
{
"inverter": {
"id": "5d791a505f70744c233b819d"
},
"timestamp": "2020-01-21 04:05:00 UTC"
},
...
]
Это было длинное введение.
Вопрос в следующем: есть ли способ запроса данных, чтобы результат запроса выглядел примерно так?
[
{
"inverter": {
"id": "5d791a505f70744c233b819d",
"timestamp": [
"2020-01-21 11:15:00 UTC",
"2020-01-21 00:20:00 UTC",
"2020-01-21 04:05:00 UTC",
...
]
},
...
]