Delta Lake-schemavalidering

Delta Lake verifierar automatiskt att schemat för dataramen som skrivs är kompatibelt med tabellens schema. Delta Lake använder följande regler för att avgöra om en skrivning från en DataFrame till en tabell är kompatibel:

  • Alla DataFrame-kolumner måste finnas i måltabellen. Om det finns kolumner i dataramen som inte finns i tabellen utlöses ett undantag. Kolumner som finns i tabellen men inte i DataFrame är inställda på null.
  • Datatyper för dataramkolumner måste matcha kolumndatatyperna i måltabellen. Om de inte matchar utlöses ett undantag.
  • DataFrame-kolumnnamn kan inte skilja sig åt endast efter skiftläge. Det innebär att du inte kan ha kolumner som "Foo" och "foo" definierade i samma tabell. Även om du kan använda Spark i skiftlägeskänsligt eller okänsligt läge (standard) är Parquet skiftlägeskänsligt när du lagrar och returnerar kolumninformation. Delta Lake är skiftlägesbevarande men okänsligt när schemat lagras och har den här begränsningen för att undvika potentiella misstag, skadade data eller förlustproblem.

Delta Lake stöder DDL för att lägga till nya kolumner explicit och möjligheten att uppdatera schemat automatiskt.

Om du anger andra alternativ, till exempel partitionBy, i kombination med tilläggsläget validerar Delta Lake att de matchar och genererar ett fel för eventuella matchningar. När partitionBy inte finns följer tillägg automatiskt partitioneringen av befintliga data.

Observera

INSERT syntax ger schematillämpning och stöder schemautveckling. Om en kolumns datatyp inte kan omvandlas till Delta Lake-tabellens datatyp på ett säkert sätt genereras ett körningsundantag. Om schemautveckling är aktiverat kan nya kolumner finnas som de sista kolumnerna i schemat (eller kapslade kolumner) för schemat som ska utvecklas.

Schemavalidering för Delta Lake-sammanslagning

merge verifierar automatiskt att schemat för de data som genereras av infognings- och uppdateringsuttrycken är kompatibla med tabellens schema. Den använder följande regler för att avgöra om merge åtgärden är kompatibel:

  • För update åtgärder och insert måste de angivna målkolumnerna finnas i Delta-måltabellen.
  • För updateAll - och insertAll -åtgärder måste källdatauppsättningen ha alla kolumner i deltatabellen. Källdatauppsättningen kan ha extra kolumner och de ignoreras.
  • För alla åtgärder, om den datatyp som genereras av uttrycken som producerar målkolumnerna skiljer sig från motsvarande kolumner i Delta-måltabellen, merge försöker omvandla dem till typerna i tabellen.

Se Automatisk schemautveckling för Delta Lake-sammanslagning.