Объединение трех больших таблиц в GBQ вызывает перегрузку запроса - PullRequest
0 голосов
/ 19 апреля 2020

У меня простой запрос:

select
  farm_fingerprint(REPLACE(concat(coalesce(CAST(UPPER(Field1) AS STRING),''), coalesce(Field2 ,'')),' ','')) as PROPERTYID
  from `mother-216719.DS1.TBL1` M
  Join `mother-216719.DS1.TBL2` B  on B.id = M.Internal_FA_Property_Ref_ID
  join `mother-216719.DS2.TBLA` T on T.ATTOM_ID = B.ATTOM_ID
LIMIT 10

поля объединения - int64 против int64. TBL2 (B) является мостовой таблицей между TBL1 и TBLA. Цель состоит в том, чтобы объединить поля между TBL1 и TBLA для консолидированных полей.

Сведения о выполнении задания указывают на значительные сеансы повторного разделения, и хотя оценка запроса указывает, что запрос должен обрабатывать 17,5 ГБ, однако выполнение задания показывает 40,5 ГБ перемешиваются. когда я LIMIT 10 это занимает 3 минуты. если я удаляю LIMIT, запрос выполняется в течение шести часов, а затем завершается неудачей.

Как это исправить? Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

В соответствии с рекомендациями @Mikhail Berlyant, приведенными в комментариях, были предложены следующие шаги оптимизации:

  • Устранение объединения перекрестных товаров путем добавления условия соответствия:

ON T.ATTOM_ID = B.ATTOM_ID AND T.some_field = M.some_fiel;

  • Примите во внимание реализацию целочисленного диапазона таблицы разделов ;
  • CAST(UPPER(Field1) AS STRING) преобразование избыточно, так как предложение UPPER всегда возвращает string type .

Составьте этот ответ для подтверждения поддержки, помогая будущим участникам в их исследовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...