У нас есть набор таблиц Google BigQuery, которые по техническим причинам различаются подстановочными знаками, например content_owner_asset_metadata_*
. Эти таблицы обновляются ежедневно, но в разное время.
Нам нужно выбрать последний раздел из каждой таблицы в шаблоне.
Сейчас мы используем этот запрос для построения наших производных таблиц:
SELECT
*
FROM
`project.content_owner_asset_metadata_*`
WHERE
_PARTITIONTIME = (
SELECT
MIN(time)
FROM (
SELECT
MAX(_PARTITIONTIME) as time
FROM
`project.content_owner_asset_metadata_*`
WHERE
_PARTITIONTIME > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
)
)
Этот оператор определяет дату, которую гарантированно должны иметь все современные таблицы, и выбирает данные этой даты, однако мне нужен фильтр, который выбирает данные из максимального времени разбиения каждой таблицы. Я знаю, что мне нужно было бы использовать _TABLE_SUFFIX
с _PARTITIONTIME
, но я не могу понять, как сделать выборочную работу, не просто загружая все наши данные (очень дорого) и используя стандартное решение «наибольшие n на группу» .
Мы не можем просто объединить несколько статических таблиц, так как наш набор данных может измениться, и сценарии, которые мы создаем, должны быть в состоянии приспособиться.