Validação do esquema do Delta Lake
O Delta Lake valida automaticamente se o esquema do DataFrame que está a ser escrito é compatível com o esquema da tabela. O Delta Lake utiliza as seguintes regras para determinar se uma escrita de um DataFrame para uma tabela é compatível:
- Todas as colunas do DataFrame têm de existir na tabela de destino. Se existirem colunas no DataFrame que não estão presentes na tabela, é gerada uma exceção. As colunas presentes na tabela, mas não no DataFrame, estão definidas como nulas.
- Os tipos de dados da coluna DataFrame têm de corresponder aos tipos de dados de coluna na tabela de destino. Se não corresponderem, é gerada uma exceção.
- Os nomes de colunas do DataFrame não podem ser diferentes apenas por maiúsculas e minúsculas. Isto significa que não pode ter colunas como "Foo" e "foo" definidas na mesma tabela. Embora possa utilizar o Spark no modo sensível a maiúsculas e minúsculas (predefinição), Parquet é sensível às maiúsculas e minúsculas ao armazenar e devolver informações da coluna. O Delta Lake preserva maiúsculas e minúsculas, mas não é sensível ao armazenamento do esquema e tem esta restrição para evitar potenciais erros, danos em dados ou problemas de perda.
O Delta Lake suporta DDL para adicionar novas colunas explicitamente e a capacidade de atualizar o esquema automaticamente.
Se especificar outras opções, como partitionBy
, em combinação com o modo de acréscimo, o Delta Lake valida que correspondem e gera um erro de correspondência. Quando partitionBy
não estiver presente, acrescenta automaticamente a criação de partições dos dados existentes.
Nota
INSERT
A sintaxe fornece imposição de esquema e suporta a evolução do esquema. Se o tipo de dados de uma coluna não puder ser lançado em segurança para o tipo de dados da tabela do Delta Lake, é emitida uma exceção de runtime. Se a evolução do esquema estiver ativada, podem existir novas colunas como as últimas colunas do esquema (ou colunas aninhadas) para que o esquema evolua.
Validação de esquema para intercalação do Delta Lake
merge
valida automaticamente se o esquema dos dados gerados por expressões de inserção e atualização é compatível com o esquema da tabela. Utiliza as seguintes regras para determinar se a merge
operação é compatível:
- Para
update
einsert
ações, as colunas de destino especificadas têm de existir na tabela Delta de destino. - Para
updateAll
einsertAll
ações, o conjunto de dados de origem tem de ter todas as colunas da tabela Delta de destino. O conjunto de dados de origem pode ter colunas adicionais e estas são ignoradas. - Para todas as ações, se o tipo de dados gerado pelas expressões que produzem as colunas de destino for diferente das colunas correspondentes na tabela Delta de destino,
merge
tenta lancá-las para os tipos na tabela.
Veja Evolução automática do esquema para a intercalação do Delta Lake.