Предположим, у меня есть следующая запись в BQ:
id name age timestamp
1 "tom" 20 2019-01-01
Затем я выполняю два "обновления" этой записи, используя потоковый API для "добавления" дополнительных данных - https://cloud.google.com/bigquery/streaming-data-into-bigquery.Это главным образом для того, чтобы обойти квоту обновлений, которую обеспечивает BQ (и это приложение с высокой степенью записи).
Затем я добавляю два изменения в таблицу, одно обновление, которое просто изменяет name
,а затем одно обновление, которое просто изменяет age
.Вот три записи после обновлений:
id name age timestamp
1 "tom" 20 2019-01-01
1 "Tom" null 2019-02-01
1 null 21 2019-03-03
Затем я хочу запросить эту запись, чтобы получить наиболее актуальную информацию.Вот как я начал:
SELECT id, **name**, **age**,max(timestamp)
FROM table
GROUP BY id
-- 1,"Tom",21,2019-03-03
Как я могу получить правильное имя и возраст здесь?Обратите внимание, что в записи могут быть тысячи обновлений, поэтому я не хочу писать 1000 операторов case, если это вообще возможно.
По различным другим причинам у меня обычно не будет всей строкиданные за один раз, у меня будет только RowID + FieldName + FieldValue.
Я предполагаю, что план B здесь состоит в том, чтобы выполнить запрос для получения текущих данных, а затем добавить свои изменения, чтобы вставить новую строку, но яЯ надеюсь, что есть способ сделать это за один раз без необходимости делать два запроса.