Поделиться через


Пропуск данных для Delta Lake

Примечание.

В Databricks Runtime 13.3 и более поздних версиях Databricks рекомендует использовать ликвидную кластеризацию для макета таблицы Delta. Кластеризация несовместима с Упорядочением Z. См. статью Использование "жидкой" кластеризации для таблиц Delta.

Сведения о пропуске данных собираются автоматически при записи данных в таблицу Delta. Delta Lake в Azure Databricks использует эти сведения (минимальные и максимальные значения, значения NULL и общие записи на файл) во время запроса, чтобы обеспечить более быстрые запросы.

Необходимо собрать статистику для столбцов, которые используются в ZORDER инструкциях. См. раздел "Что такое Z-упорядочение?".

Указание столбцов статистики Delta

По умолчанию Delta Lake собирает статистику по первым 32 столбцам, определенным в схеме таблицы. Для этой коллекции каждое поле в вложенном столбце считается отдельным столбцом. Это поведение можно изменить, задав одно из следующих свойств таблицы:

Свойство таблицы Поддерживается среда выполнения Databricks Description
delta.dataSkippingNumIndexedCols Все поддерживаемые версии среды выполнения Databricks Увеличьте или уменьшите количество столбцов, в которых Delta собирает статистику. Зависит от порядка столбцов.
delta.dataSkippingStatsColumns Databricks Runtime 13.3 LTS и более поздних версий Укажите список имен столбцов, для которых Delta Lake собирает статистику. Замены dataSkippingNumIndexedCols.

Свойства таблицы можно задать при создании таблицы или инструкциях ALTER TABLE . См. справочник по свойствам таблицы Delta.

Обновление этого свойства не выполняет автоматическую перекомпьютерную статистику для существующих данных. Скорее, это влияет на поведение будущей коллекции статистики при добавлении или обновлении данных в таблице. Delta Lake не использует статистику для столбцов, не включенных в текущий список столбцов статистики.

В Databricks Runtime 14.3 LTS и более поздних версиях можно вручную активировать повторную компиляцию статистики для таблицы Delta с помощью следующей команды:

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Примечание.

Длинные строки усечены во время сбора статистики. Вы можете исключить длинные строковые столбцы из коллекции статистики, особенно если столбцы часто не используются для фильтрации запросов.

Что такое Упорядочение Z?

Примечание.

Databricks рекомендует использовать кластеризацию жидкости для всех новых таблиц Delta. Нельзя использовать ZORDER в сочетании с отказоустойчивой кластеризации.

Z-упорядочение — это способ колокат связанных сведений в одном наборе файлов. Такое совместное использование автоматически применяется в алгоритмах пропуска данных в Delta Lake на платформе Azure Databricks. Это позволяет значительно уменьшить объем данных, которые необходимо считывать Delta Lake в Azure Databricks. Для данных Z-заказа укажите столбцы, которые нужно упорядочить в предложении ZORDER BY :

OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)

Если предполагается, что столбец будет часто использоваться в предикатах запросов и этот столбец имеет большую кратность (то есть большое количество уникальных значений), используйте ZORDER BY.

Вы можете указать несколько столбцов для ZORDER BY в виде списка с разделением запятыми. Однако эффективность этого подхода снижается по мере увеличения количества столбцов. Z-упорядочение по столбцам, не имеющим статистики, собранных на них, будет неэффективным и тратой ресурсов. Это связано с тем, что для пропуска данных требуются локальные статистические данные столбцов, такие как min, max и count. Можно настроить сбор статистики в определенных столбцах путем изменения порядка столбцов в схеме или увеличения числа столбцов для сбора статистики.

Примечание.

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

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

    Например, если ZORDER BYdate и все последние записи имеют гораздо больший размер (например, более длинные массивы или строковые значения), чем ранее, предполагается, что продолжительность задачи в рамках задания OPTIMIZE будет отклонена, как и размер результирующих файлов. Однако это проблема самой команды OPTIMIZE; она не должна оказывать негативное влияние на последующие запросы.