Weryfikacja schematu usługi Delta Lake
Usługa Delta Lake automatycznie sprawdza, czy schemat zapisywanej ramki danych jest zgodny ze schematem tabeli. Usługa Delta Lake używa następujących reguł w celu określenia, czy zapis z ramki danych do tabeli jest zgodny:
- Wszystkie kolumny ramki danych muszą istnieć w tabeli docelowej. Jeśli w tabeli nie ma kolumn w ramce danych, zostanie zgłoszony wyjątek. Kolumny obecne w tabeli, ale nie w ramce danych są ustawione na wartość null.
- Typy danych kolumn ramki danych muszą być zgodne z typami danych kolumn w tabeli docelowej. Jeśli nie są one zgodne, zostanie zgłoszony wyjątek.
- Nazwy kolumn ramki danych nie mogą się różnić tylko wielkością liter. Oznacza to, że nie można mieć kolumn takich jak "Foo" i "foo" zdefiniowanych w tej samej tabeli. Mimo że w trybie domyślnym lub bez uwzględniania wielkości liter można użyć platformy Spark, parquet jest uwzględniany podczas przechowywania i zwracania informacji o kolumnie. Usługa Delta Lake zachowuje wielkość liter, ale nie jest wrażliwa na przechowywanie schematu i ma to ograniczenie, aby uniknąć potencjalnych błędów, uszkodzenia danych lub problemów z utratą.
Usługa Delta Lake obsługuje DDL, aby jawnie dodać nowe kolumny i możliwość automatycznego aktualizowania schematu.
Jeśli określisz inne opcje, takie jak partitionBy
, w połączeniu z trybem dołączania usługa Delta Lake sprawdza, czy są one zgodne i zgłasza błąd pod kątem niezgodności. Gdy partitionBy
nie jest obecny, dołącza automatycznie następuje partycjonowanie istniejących danych.
Uwaga
INSERT
składnia zapewnia wymuszanie schematu i obsługuje ewolucję schematu. Jeśli nie można bezpiecznie rzutować typu danych kolumny na typ danych tabeli usługi Delta Lake, zgłaszany jest wyjątek środowiska uruchomieniowego. Jeśli ewolucja schematu jest włączona, nowe kolumny mogą istnieć jako ostatnie kolumny schematu (lub kolumny zagnieżdżone), aby schemat ewoluował.
Walidacja schematu dla scalania usługi Delta Lake
merge
automatycznie sprawdza, czy schemat danych generowanych przez wyrażenia wstawiania i aktualizacji jest zgodny ze schematem tabeli. Używa ona następujących reguł w celu określenia, czy operacja jest zgodna merge
:
- W przypadku
update
akcji iinsert
określone kolumny docelowe muszą istnieć w docelowej tabeli delty. - W przypadku
updateAll
iinsertAll
akcji źródłowy zestaw danych musi zawierać wszystkie kolumny docelowej tabeli delty. Źródłowy zestaw danych może zawierać dodatkowe kolumny i są ignorowane. - Dla wszystkich akcji, jeśli typ danych wygenerowany przez wyrażenia generujące kolumny docelowe różnią się od odpowiednich kolumn w docelowej tabeli delty,
merge
spróbuje rzutować je do typów w tabeli.
Zobacz Automatyczna ewolucja schematu na potrzeby scalania usługi Delta Lake.