Проверка схемы Delta Lake

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

  • Все столбцы DataFrame должны существовать в целевой таблице. Если в кадре данных есть столбцы, отсутствуют в таблице, возникает исключение. Столбцы, присутствующие в таблице, но не в кадре данных, имеют значение NULL.
  • Типы данных столбцов DataFrame должны соответствовать типам данных столбцов в целевой таблице. Если они не совпадают, возникает исключение.
  • Имена столбцов кадра данных не могут отличаться только по регистру. Это означает, что в одной таблице нельзя определить такие столбцы, как Foo и Foo. Хотя Вы можете использовать Spark в режиме с учетом регистра или без учета (по умолчанию), Parquet учитывает регистр при хранении и возврате сведений о столбцах. Delta Lake сохраняет регистр, но не учитывается при хранении схемы и имеет это ограничение, чтобы избежать потенциальных ошибок, повреждения данных или проблем с потерей.

Delta Lake поддерживает DDL для явного добавления новых столбцов и возможность автоматического обновления схемы.

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

Примечание

INSERT синтаксис обеспечивает принудительное применение схемы и поддерживает эволюцию схемы. Если тип данных столбца не может быть безопасно приведен к типу данных таблицы Delta Lake, создается исключение среды выполнения. Если включена эволюция схемы , новые столбцы могут существовать в качестве последних столбцов схемы (или вложенных столбцов) для развития схемы.

Проверка схемы для слияния Delta Lake

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

  • Для update действий и insert указанные целевые столбцы должны существовать в целевой таблице Delta.
  • Для updateAll действий и insertAll исходный набор данных должен содержать все столбцы целевой разностной таблицы. Исходный набор данных может содержать дополнительные столбцы, и они игнорируются.
  • Если для всех действий тип данных, создаваемый выражениями, создающими целевые столбцы, отличается от соответствующих столбцов в целевой таблице Delta, merge пытается привести их к типам в таблице.

См . раздел Автоматическая эволюция схемы для слияния Delta Lake.