Суффикс таблицы Dynami c с BigQuery не ограничивает обрабатываемые данные - PullRequest
0 голосов
/ 02 апреля 2020

Я пытался динамически выбирать из указанных c таблиц, чтобы уменьшить общее количество обработанных данных. Использование _TABLE_SUFFIX, кажется, работает, когда фильтры устанавливаются вручную следующим образом

Обратите внимание, что объявленные переменные здесь не вариант, это запланированный запрос с использованием веб-интерфейса BigQuery, и использование объявленных переменных, по-видимому, препятствует сохранению выходная таблица.

SELECT * FROM SOME_TABLE
WHERE _TABLE_SUFFIX BETWEEN "20200101" and FORMAT_DATE("%Y%m%d", CURRENT_DATE())

>>> 50MB PROCESSED

Однако динамическая установка _TABLE SUFFIX на основе какой-либо другой таблицы, по-видимому, выполняет полное сканирование таблицы. Обратите внимание, что здесь выбрано одно и то же значение.

SELECT * FROM SOME_TABLE
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE("%Y%m%d", (SELECT MAX(date) FROM OTHER TABLE)) and FORMAT_DATE("%Y%m%d", CURRENT_DATE())

>>> 350mb PROCESSED

1 Ответ

1 голос
/ 02 апреля 2020

Если бы ваши таблицы были кластеризованы, это вообще не было бы проблемой.

См .:

Теперь, если вы хотите ограничить объем данных, запрашиваемых для этих таблиц, вы можете использовать сценарии:

DECLARE begin_date STRING 
  DEFAULT (FORMAT_DATE("%Y%m%d", (SELECT MAX(date) FROM OTHER TABLE)));

SELECT * FROM SOME_TABLE
WHERE _TABLE_SUFFIX BETWEEN begin_date and FORMAT_DATE("%Y%m%d", CURRENT_DATE())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...