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


Перенос озера данных Parquet в Delta Lake

В этой статье приведены рекомендации по преобразованию существующего озера данных Parquet в Delta Lake. Delta Lake — это базовый формат в Databricks lakehouse. См. статью Сведения о Delta Lake.

Рекомендации перед преобразованием в Delta Lake

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

Кроме того, необходимо рассмотреть вопрос о том, растут ли преобразованные данные, а также как часто запрашиваются данные. Вы можете выбрать различные подходы для разных таблиц Parquet в озере данных.

Подходы к преобразованию Delta Lake

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

  • Добавочный: обозначает функциональные возможности, поддерживающие преобразование дополнительных данных, добавленных в источник преобразования после начала преобразования.
  • Дублирует данные: указывает, записываются ли данные в новое расположение или изменяются на месте.
  • Поддерживает структуру данных: указывает, поддерживается ли стратегия секционирования во время преобразования.
  • Данные обратной заполнения: обозначает функциональные возможности, поддерживающие обратную заполнение данных, добавленные в источник преобразования после начала преобразования.
  • Простота использования. Указывает уровень усилий пользователя для настройки и запуска преобразования данных.
Способ Приращение Дублирует данные Поддерживает структуру данных Обратная заполнение данных Простота использования
Deep CLONE Parquet Да Да Да Да Легко
Мелкий CLONE паркет Да No Да Да Простой
CONVERT TO DELTA No No Да Нет Легко
Автозагрузчик Да Да Нет Необязательно Некоторая конфигурация
Задание Batch Spark пользовательская логика; Да Нет пользовательская логика; пользовательская логика;

В следующих разделах рассматриваются все эти параметры более подробно.

Перенос данных Parquet с помощью CLONE Parquet

Вы можете использовать CLONE Parquet для добавочного копирования данных из озера данных Parquet в Delta Lake. Неглубокие клоны создают указатели на существующие файлы Parquet, сохраняя таблицу Parquet в исходном расположении и формате, обеспечивая оптимизированный доступ через собранные статистические данные о файлах. Вы можете записать в таблицу, созданную неглубоким клоном, не влияя на исходный источник данных.

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

В следующем примере показано использование команды CLONE:

CREATE OR REPLACE TABLE <target-table-name> [SHALLOW] CLONE parquet.`/path/to/data`;

Перенос данных Parquet с помощью CONVERT TO DELTA

Вы можете использовать CONVERT TO DELTA для преобразования каталога файлов Parquet в таблицу Delta с помощью одной команды. После преобразования таблицы в Delta Lake следует прекратить чтение и запись из таблицы с помощью логики Parquet. Данные, записанные в целевой каталог после начала преобразования, могут не отражаться в результирующей таблице Delta. См. статью о преобразовании в Delta Lake.

В следующем примере показано использование CONVERT TO DELTA:

CONVERT TO DELTA parquet.`abfss://container@storageAccount.dfs.core.windows.net/parquet-data`;

Перенос данных Parquet с помощью автозагрузчика

Хотя автозагрузчик — это продукт, предназначенный для добавочного приема данных из облачного хранилища объектов, его можно использовать для реализации шаблона, который добавочно копирует все данные из заданного каталога в целевую таблицу. См. статью об автозагрузчике.

В следующем примере кода содержатся конфигурации, которые:

  • Обработайте все существующие файлы в исходном каталоге.
  • Активируйте автоматическое еженедельное задание резервной заполнения для записи файлов, которые могли быть пропущены.
  • Разрешить Apache Spark использовать множество заданий Spark, чтобы избежать разлива и ошибок вне памяти, связанных с большими секциями данных.
  • Предоставьте комплексные гарантии обработки точно один раз.
(spark.readStream
  .format("cloudFiles")
  .option("cloudFiles.format", "parquet")
  .option("cloudFiles.includeExistingFiles", "true")
  .option("cloudFiles.backfillInterval", "1 week")
  .option("cloudFiles.schemaLocation", checkpoint_path)
  .load(file_path)
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .trigger(availableNow=True)
  .toTable(table_name)
)

Вы можете использовать автозагрузчик в разностных динамических таблицах с Python или SQL:

Перенос данных Parquet с помощью пользовательской логики пакетной службы Apache Spark

Написание пользовательской логики Apache Spark обеспечивает большую гибкость в управлении тем, как и при переносе различных данных из исходной системы, но может потребоваться обширная конфигурация для предоставления возможностей, встроенных в другие подходы.

В основе этого подхода лежит простая операция чтения и записи Apache Spark, например следующая:

spark.read.format("parquet").load(file_path).write.mode("append").saveAsTable(table_name)

Чтобы выполнить обратную заполнение или добавочную миграцию, вы можете полагаться на структуру секционирования источника данных, но может также потребоваться написать пользовательскую логику для отслеживания того, какие файлы были добавлены после последней загрузки данных из источника. Хотя вы можете использовать возможности слияния Delta Lake, чтобы избежать написания повторяющихся записей, сравнение всех записей из большой исходной таблицы Parquet с содержимым большой таблицы Delta является вычислительно дорогой задачей.

Когда вы не должны преобразоваться в Delta Lake?

Прежде чем преобразовывать все существующие данные Parquet в Delta Lake, вы, вероятно, рассмотрите потенциальные компромиссы.

Azure Databricks разрабатывает множество оптимизированных функций lakehouse вокруг Delta Lake и Delta Lake предоставляет богатую открытый код экосистему с собственными соединителями для многих языков и корпоративных систем данных. Разностный общий доступ расширяет возможность совместного использования данных, хранящихся в Delta Lake, другим клиентам.

Delta Lake построен на основе Parquet, и, как это, Azure Databricks также оптимизировано для чтения и записи для взаимодействия с файлами Parquet.

Databricks рекомендует использовать Delta Lake для всех таблиц, получающих регулярные обновления или запросы из Azure Databricks. Вы можете сохранить данные в формате Parquet в некоторых случаях, например:

  • Вышестоящей системы, которая записывает данные в Parquet, не поддерживает собственные записи в Delta Lake.
  • Нижестоящую систему, которая считывает данные Parquet, не может считывать Delta Lake.

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