«Delta Lake — разделение, Z-Order и жидкое кластерирование»

«Delta Lake — раздельное хранение, сортировка по Z-Order и оптимизированное кластеризование»

Как различные методы разделения/кластеризации реализованы в Delta? Как они работают на практике?

Фото от frame harirak на Unsplash

Одна из проблем, которая всегда делала Big Data сложной, заключается в ее размере. Разделение, особенно когда оно выполняется хорошо, всегда было способом улучшить время выполнения запросов на больших объемах данных путем уменьшения объема данных, которые необходимо прочитать. Однако разделение данных является сложным и требует тщательного обдумывания и предварительного планирования, так как то, что соответствует сегодняшним требованиям, может не соответствовать будущим. Например, при разделении в стиле Hive, столбцы могут потребовать изменений или даже увеличить их кардинальность и привести к чрезмерному разделению данных (проблема с малыми файлами), требующему полной перестройки данных, что вовсе не является идеальным.

Еще одним приемом, используемым для пропуска данных и предотвращения полного сканирования, является кластеризация Z-Order. Однако у этой техники есть некоторые ограничения. Одно из них заключается в том, что вновь передаваемые данные по умолчанию не упорядочены, и пользователи должны повторно сгруппировать их, что означает, что уже сгруппированные данные будут сгруппированы и перезаписаны, увеличивая время выполнения операции. Пользователям Z-Order также необходимо определять столбцы кластеризации при каждом запуске команды, так как они не являются частью каких-либо свойств таблицы.

Именно здесь роль играет Liquid Clustering. Предполагается, что он может без проблем соответствовать текущему макету данных и также может адаптироваться к будущим потребностям без необходимости переписывать уже сгруппированные данные.

В этой статье мы объясним подробности различных стратегий обрезки данных в Delta и как они применяются.

Обрезка разделов – разделение в стиле Hive

Разделение в стиле Hive - Изображение от автора

Разделение в стиле Hive – это способ организации таблицы на небольшие части. Эти части данных организованы в несколько подпапок, которые содержат данные для значения раздела.

dbfs://people10m/gender=M/data_0.jsondbfs://people10m/gender=M/data_1.jsondbfs://people10m/gender=F/data_0.json…