оптимизировать запрос, оставляя соединение на многораздельной таблице - PullRequest
0 голосов
/ 14 января 2019

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

У меня более тысячи ежедневных таблиц (около 20 МБ каждая, данные за три года). Я пытаюсь объединить каждую из них со статической таблицей (около 15 ГБ), и у меня есть «комбинированная» таблица в котором хранятся все выходные данные левого соединения.

Я обновляю ежедневные таблицы еженедельно, то есть каждую неделю создаю 7 тальбов с полем раздела, для которого указана таблица, а затем перезаписываю «комбинированную» таблицу последними данными. В настоящее время процесс запроса около 36 ГБ.

Неэффективность здесь заключается в том, что объединение выполняется на всех ежедневных таблицах, в отличие от последних 7, которые я только что добавил, и использование поля «где на разделенном поле» для фильтрации до последних 7 дней не оптимизирует обрабатываемую сумму.

Это запрос, который я использовал, чтобы объединить все, ISBN - это ключ объединения.

SELECT o.* EXCEPT (Date), Date(o.Date) as Date, Appended.* EXCEPT(ISBN)
FROM (SELECT * FROM `2019.all_traffic_*`) as o
LEFT OUTER JOIN `2019.all_isbn` as Appended ON o.ISBN = Appended.ISBN

Лучший оптимизированный способ, который я могу придумать, - это добавить объединенные результаты для последней 7-секционной таблицы в существующую «комбинированную» таблицу. И я не уверен, как этого добиться.

Если вы посоветуете использовать разделенные таблицы в BQ, пожалуйста, помогите, заранее спасибо!

...