2017-01-10 2 views
1

У меня есть некоторые данные, которые я хотел бы разделить по дате, а также разделять внутренне определенным идентификатором клиента.Творческое использование разделов дат

В настоящее время мы сохраняем эти данные с использованием модели таблицы-даты. Он работает хорошо, но запросы отдельных идентификаторов клиентов медленны и дороги.

Мы рассмотрели создание таблицы для каждого идентификатора клиента и использование разбиения по дате в этих таблицах. Единственная проблема здесь заключается в том, что заставляют нас брать тысячи рабочих мест в день, а также иметь данные, разделенные идентификатором клиента заранее.

Вот возможное решение я придумал: -Stick с подходом таблицы на дату (например, log_20170110) -Создание фиктивного столбец даты, которую мы используем в качестве даты раздела, и установить эту дату - 01-01 (например, для идентификатора клиента 1235, установите _PARTITIONTIME на 1235-01-01)

Это позволит нам загружать данные в день, как и сейчас, дает нам разбиение по дате и будет использовать чтобы разделить на идентификатор клиента. Вы видите что-то не так с этим подходом? Будет ли BigQuery позволять нам хранить данные за 200 год или 5000 год?

PS: Мы также можем использовать схему, которая подталкивает даты к post-zero-unixtime, например, добавляет 2000 к году или нажимает последние две цифры на месяц и день, например 1235 => 2012-03- 05.

ответ

0

Will BigQuery позволяют хранить данные за год 200, или 5000 год?

Да, любая дата между 00001-01-01 и 9999-12-31

Так, формально говоря, это вариант (и кстати, зависит от того, сколько клиентов вы планируете/уже есть)

подробнее о той же идее в https://stackoverflow.com/a/41091896/5221944

Meantime, я ожидал бы BigQuery иметь вскоре возможность разбиения на разделы произвольным полем. Может быть, в NEXT 2017 - просто гадать: o)

0

Предлагаемая идея, вероятно, создаст некоторые проблемы с производительностью для запросов (по мере увеличения количества разделов). Вообще говоря, разбиение по дате хорошо работает с несколькими 1000 разделами.

client_ids обычно не связаны друг с другом и идеально подходят для хэширования. В то время как мы работаем над поддержкой более богатых разновидностей разметки, один из вариантов заключается в хэш-идентификаторе client_ids в N ведрах (~ 100?) И имеют N секционированных таблиц. Таким образом, вы можете запросить через свои N таблиц на определенную дату. Использование, например, 100 таблиц снизило бы стоимость до 1% от того, что она будет использовать 1 таблицу со всеми client_id. Он также должен сканировать небольшое количество разделов, соответственно улучшая производительность. К сожалению, этот подход не касается необходимости размещения идентификаторов клиентов в правильной таблице (он должен управляться вами).

Смежные вопросы