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


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

Примечание.

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

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

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

Задать столбцы статистики Delta

По умолчанию Delta Lake собирает статистику по первым 32 столбцам, определенным в схеме таблицы. Если включена прогнозная оптимизация, статистика пропуска файлов выбирается интеллектуально и не ограничивается первыми 32 столбцами. Предсказательная оптимизация автоматически выполняет команду ANALYZEдля сбора статистики в управляемых таблицах каталога Unity. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц каталога Unity, чтобы упростить обслуживание данных и сократить затраты на хранение. См. прогнозную оптимизацию для таблиц, управляемых каталогом Unity.

Если вы не используете прогнозную оптимизацию, можно изменить поведение, которое ограничивает коллекции статистики до 32 столбцов, задав одно из следующих свойств таблицы:

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

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

ALTER TABLE table_name SET TBLPROPERTIES('delta.dataSkippingStatsColumns' = 'col1, col2, col3')

Обновление этих свойств автоматически не пересчитывает статистику для уже имеющихся данных. Скорее, это влияет на поведение будущей коллекции статистики при добавлении или обновлении данных в таблице. 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-order данных необходимо указать столбцы для сортировки в разделе ZORDER BY.

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

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

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

Примечание.

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

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

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