Кластерная таблица Google BigQuery не уменьшает размер запроса при выполнении запроса с предложением WHERE в кластерном поле - PullRequest
0 голосов
/ 05 октября 2018

У меня есть таблица Google BigQuery, содержащая 500 000 строк, которые я настроил для разделения на поле TIMESTAMP с именем Date и кластеризации с помощью поля STRING с именем EventCategory (это всего лишь пример таблицы, содержащей более 500 миллионов строк).

У меня есть копия таблицы, которая не разделена и не кластеризована.

Я выполняю следующий запрос для обеих таблиц:

SELECT 
  * 
FROM 
  `table_name`   
WHERE
   EventCategory = "email"

Всего 2400 строк, где EventCategory - это "электронная почта".Когда я запускаю запрос к некластеризованной таблице, я получаю следующее:

enter image description here

Когда я запускаю запрос к кластеризованной таблице, я получаю следующее:

enter image description here

Вот схема как некластеризованной, так и кластеризованной таблицы:

Date             TIMESTAMP   NULLABLE
UserId           STRING      NULLABLE
EventCategory    STRING      NULLABLE
EventAction      STRING      NULLABLE
EventLabel       STRING      NULLABLE
EventValue       STRING      NULLABLE

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

Любая помощь здесь будет принята с благодарностью!

ОБНОВЛЕНИЕ:

Если я изменю запрос на:

SELECT
  *
FROM
  `table_name`   
WHERE
  EventCategory = "ad"

Я получаю следующий результат:

enter image description here

Есть 53640 строк с EventCategory "ad", и похоже, что кластеризация привела к сканированию меньшего количества данных таблицыХотя и не намного меньше (529,2 МБ по сравнению с 586 МБ).

Таким образом, похоже, что кластеризация работает, но данные не сгруппированы должным образом в таблице?Как бы я это исправить?Я попытался повторно создать таблицу несколько раз с использованием DDL и даже сохранить данные таблицы в JSON в GCS, а затем импортировать их в новую многораздельную и кластеризованную таблицу, но она ничего не изменила.

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

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Причина, по которой кластеризация не очень помогала, была специфична для данных таблицы.Таблица представляла собой данные на основе событий, которые были разделены по дням, а затем сгруппированы по категориям EventCategory (данные сгруппированы по разделам каждого дня).Поскольку каждый день будет содержать большое количество строк для каждого типа EventCategory, при запросе всей таблицы для определенной EventCategory все равно придется искать каждый отдельный раздел, который тогда почти наверняка будет иметь некоторые данные с этой EventCategory, что означает, что почти каждый кластер должен будетискать тоже.

0 голосов
/ 30 ноября 2018
  • Данные разбиты по дням и внутри, где они кластеризованы,
  • кластеризация работает лучше всего, когда вы загружаете целые разделы (дни) сразу или экспортируете раздел (день) в Google Storage (который должен быть бесплатным) и импортировать его снова в другую таблицу, когда мы попытались загрузить что-то вроде 4 ГБ JSONS, разница была примерно 60 / 10.
0 голосов
/ 06 октября 2018

Если у вас есть менее 100 МБ данных в день, кластеризация для вас мало что даст - вы, вероятно, будете получать один <= 100 МБ данных за каждый день. </p>

Вы не упомянулисколько дней у вас данных (количество разделов, как спросил Михаил), но поскольку общее количество отсканированных данных составляет 500 МБ, я предполагаю, что у вас есть как минимум 5 дней данных и менее 100 МБ в день.

Следовательно, результаты, которые вы получаете, кажутся ожидаемыми.

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