Стратегия разделения Delta Lake для данных событий

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

Основным вариантом использования будет получение событий действий пользователя, происходящих в приложении. Пакеты данных этого события будут попадать в корзину S3 примерно каждые 5-30 минут, и Databricks Auto Loader забирает их и сохраняет в дельта-таблице.

Типичный запрос: получить все события, где colA = x, за последний день, неделю или месяц.

Я думаю, что типичной стратегией здесь является разделение по дате. например:

date_trunc("day", date) # 2020-04-11T00:00:00:00.000+000

Это создаст 365 разделов за год. Я ожидаю, что каждый раздел будет содержать около 1 ГБ данных. В дополнение к секционированию я планирую использовать z-упорядочение для одного из столбцов с высокой мощностью, который будет часто использоваться в предложении where.

Это слишком много разделов? Есть ли лучший способ разделить эти данные? Поскольку я делю разделы по дням, а данные поступают каждые 5-30 минут, можно ли вместо этого просто добавить данные в раздел дней?


person Sogun    schedule 19.02.2021    source источник


Ответы (1)


Это действительно зависит от количества данных, которые поступают в день, и от того, сколько файлов следует прочитать, чтобы ответить на ваш запрос. Если это 10 Гб, то раздел на день в порядке. Но вы также можете разделить по временной метке, усеченной до недели, и в этом случае вы получите только 52 раздела в год. ZOrdering поможет сохранить файлы в оптимальном состоянии, но если вы добавляете данные каждые 5-30 минут, вы получите как минимум 24 файла в день внутри раздела, поэтому вам нужно будет запускать OPTIMIZE с ZOrder каждую ночь, или что-то вроде этого, чтобы уменьшить количество файлов. Кроме того, убедитесь, что вы используете оптимизированные записи, хотя это замедлить операцию записи, это уменьшит количество генерируемых файлов (если вы планируете использовать ZOrdering, тогда нет смысла включать автосупаковку)

person Alex Ott    schedule 06.03.2021
comment
Отлично, с какой версии Auto Optimization доступна в Delta? - person mike; 06.03.2021
comment
@mike, это функция только для Databricks прямо сейчас ... Я думаю, что это было с DBR 7.1 (нужно заглянуть в примечания к выпуску, чтобы сказать точно) - person Alex Ott; 06.03.2021