Мы пытаемся построить (или лучше сказать перестроить) наш DWH в облаке на основе BigQuery. Мы решили использовать таблицы с разделением по полю даты (например, поле created_date) для наших необработанных данных вместо разделов времени приема, потому что с помощью этой функции мы можем легко загружать данные, а затем запрашивать их с помощью столбца даты раздела «сгруппировать по», построить датамарты бла-бла-бла. Мы предположили, что этот метод разделения увеличит скорость запросов и снизит их стоимость (по сравнению с несекционированными таблицами - да), НО мы обнаружили, чем когда вы запрашиваете таблицу с помощью поля WHERE по разделу (например, 'select count (*) from table where created_date = current_date '), это будет стоить денег.

Наши запросы к секционированной таблице по времени приема в старом стиле с WHERE _PARTITIONTIME = '' были БЕСПЛАТНЫМИ! (например, 'выберите количество (*) из таблицы, где _PARTITIONTIME = current_date')

Например:

1) выберите значение1 из таблицы1, где _PARTITIONTIME = current_date

2) выберите значение1 из таблицы1, где created_date = current_date

3) выберите количество (*) из таблицы1, где _PARTITIONTIME = current_date

Второй запрос стоит дороже, потому что он сканирует 2 столбца. Это логично. Но нечестно (((Третий запрос, кстати, абсолютно бесплатный!

Это очень печальная ситуация, потому что в документации НЕТ НИКАКИХ ПРЕДУПРЕЖДЕНИЙ об этом «побочном эффекте». Эта функция, призванная облегчить жизнь разработчикам БД (я полагаю), позиционируется как передовая функция и настоятельно рекомендуется Google. Но никто не сказал, что это будет стоить и вам дополнительных денег!

Итак, вопрос в том, можем ли мы каким-то образом запросить разделенные по полю даты таблицы, используя ключ раздела бесплатно? Есть ли какой-либо другой псевдостолбец или метод фильтрации по ключу раздела, если вы используете разделение на основе поля даты / времени?

(ps: вы, ребята из Google, должны добавить псевдоколонку для метода разделения даты / времени, если он не существует).

Спасибо!

3
Dmitry L. 11 Окт 2019 в 17:18

1 ответ

Лучший ответ

Итак, вопрос в том, можем ли мы каким-то образом запросить разделенные по полю даты таблицы, используя ключ раздела бесплатно?

Ответ: нет, запрос раздела не будет бесплатным.

Есть ли какой-либо другой псевдостолбец или метод фильтрации по ключу раздела, если вы используете разделение на основе поля даты / времени?

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

Вы, ребята из Google, должны добавить псевдоколонку для метода разделения даты / времени, если он не существует

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

Изменить : от вашего имени открыт запрос функции. Вы можете следить за ним здесь

0
Sergi Muñoz 13 Ноя 2019 в 11:59