Пределы Google BigQuery? - PullRequest
       8

Пределы Google BigQuery?

0 голосов
/ 05 мая 2018

Какое ограничение на Google BigQuery? Я пытаюсь выполнить оператор SQL для примерно 6 ГБ данных, но, похоже, это занимает много времени (более часа), а затем, когда я вернулся, чтобы проверить его через полдня, я обнаружил ошибку " истекло время ожидания запроса. повторите попытку ".

Я предполагаю, что 6 ГБ данных не слишком много по сравнению с тем, что могли бы иметь другие люди, но меня удивляет, что я рассчитываю на подобное. Если это помогает, мой SQL-запрос немного сложен и, по сути, вычисляет уникальное число скользящего окна, что, как я считаю, обычно занимает много времени. Я также проверил, чтобы добавить в таблицу назначения и «разрешить большие результаты».

Кроме того, я запускаю запрос в самом редакторе запросов Google BigQuery (где написано Compose Query).

РЕДАКТИРОВАТЬ: (ниже фактический запрос, который я использую)

SELECT t1.time, t1.x, COUNT(DISTINCT t2.x)
FROM `data` AS t1
JOIN `data` AS t2 ON t2.time 
BETWEEN TIMESTAMP_SUB(t1.time, INTERVAL 1 HOUR) AND t1.time
GROUP BY t1.time, t1.x

Вот некоторые примеры данных:

                X
05:20:19        4   <- 2 (4 and 5 are unique)
05:20:19        5   <- 2 (4 and 5 are unique) * same time as before
05:37:18        7   <- 3 (4, 5 and 7 are unique)
05:45:14        4   <- 3 (4, 5, and 7)
05:56:04        4   <- 3 (4, 5, and 7)
06:18:48        6   <- 4 (now 4, 5, 6, and 7)
06:48:34        3   <- 3 (only checks past hour, so now 3, 4, 6)
07:52:48        1   <- 1 (only time in past hour, so only 1)

У меня есть около 6 ГБ этих данных

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Как установлено в комментариях:

  • Если ваш вопрос «как сделать уникальный подсчет скользящего окна» - проверьте ответ на вопрос https://stackoverflow.com/a/49866033/132438.

  • Если вопрос «могу ли я уничтожить любую базу данных с 6 ГБ данных», ответ «да»:

Например, допустим, у вас есть 5 миллионов строк данных. Это не так уж много. Но затем вы делаете CROSS JOIN без фильтров и хотите вернуть эти строки.

5 миллионов строк * 5 миллионов строк = 25 триллионов строк.

Вы, конечно, не хотите 25 триллионов строк, и если вы хотите их - это, безусловно, займет много времени. Поэтому, пожалуйста, не взрывайте соединения.

0 голосов
/ 05 мая 2018

Слабое место в вашем запросе, которое я вижу, - это выполнение функции TIMESTAMP_SUB () в JOIN ON
Вместо этого я бы попытался предварительно рассчитать его, прежде чем ПРИСОЕДИНИТЬСЯ, как показано ниже

#standardSQL
SELECT t1.time, t1.x, COUNT(DISTINCT t2.x)
FROM (
  SELECT time, x, 
    TIMESTAMP_SUB(time, INTERVAL 1 HOUR) time_sub_hour 
  FROM `data`
) AS t1
JOIN `data` AS t2 
ON t2.time BETWEEN time_sub_hour AND t1.time
GROUP BY t1.time, t1.x

Между тем, как уже упоминали другие, вы, по сути, перекрестно соединяете довольно большую таблицу с самим собой, таким образом, очень высока вероятность отказа

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