Bigquery Выбрать все последние разделы из набора шаблонов - PullRequest
0 голосов
/ 03 мая 2019

У нас есть набор таблиц 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 на группу» .

Мы не можем просто объединить несколько статических таблиц, так как наш набор данных может измениться, и сценарии, которые мы создаем, должны быть в состоянии приспособиться.

...