Bigquery - сократить время выполнения запроса - PullRequest
0 голосов
/ 25 июня 2019

У меня есть таблица Bigquery со следующей структурой:

source | feature |  value |
---------------------------
s1     |    f1   |  HIGH  |
---------------------------
s2     |    f1   |  LOW   |
---------------------------
s2     |    f2   | MEDIUM |
.
.
.
---------------------------
s7000 |   f1000 |  HIGH   |

Я хотел бы посчитать, сколько источников появляется для всех перестановок функций и значений. Пример результирующего набора:

feature  |  feature  | value  | value  |  count
-----------------------------------------------
    f1   |    f2     |  HIGH  | HIGH   |   7
-----------------------------------------------
    f1   |    f2     |  LOW   | HIGH   |  211
.
.
.
-----------------------------------------------
  f7000  |  f1000    |  HIGH  |MEDIUM |  123  

Это мой sql запрос:

select     m1.feature as f1, m2.feature as f2, m1.value as v1, m2.value as v2, count(*)
from       matrix  m1 inner join matrix m2 on m1.source=m2.source
group by   m1.feature, m2.feature, m1.value, m2.value

В этом случае проблема заключается в очень низкой производительности больших запросов. Таблица матрицы не такая большая, около 7 000 000 записей. Я остановил выполнение запроса через 7 минут ...

Не могли бы вы помочь мне повысить производительность моего запроса?

1 Ответ

3 голосов
/ 25 июня 2019

Несколько рекомендаций:

  • вам, скорее всего, не нужны симметричные пары - поэтому следует добавить что-то вроде
    WHERE m1.feature < m2.feature
  • в случае, если у вас есть дубликаты в исходной матрице - вы хотите предварительно агрегировать их (до самостоятельного объединения)
  • тратится много времени на то, чтобы вывести результат запроса в пользовательский интерфейс, поэтому вы можете использовать CREATE TABLE AS или INSERT INTO, чтобы отменить загрузку результата в пользовательский интерфейс, и вместо этого получить его в таблицу, которую затем можете использовать / query в вашем будет
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...