Rozszerzanie typu
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej w środowisku Databricks Runtime 15.2 lub nowszym.
Tabele z włączonym rozszerzaniem typu umożliwiają zmianę typów danych kolumn na szerszy typ bez ponownego zapisywania bazowych plików danych. Typy kolumn można zmienić ręcznie lub użyć ewolucji schematu, aby rozwijać typy kolumn.
Rozszerzenie typu wymaga usługi Delta Lake. Wszystkie tabele zarządzane wykazu aparatu Unity domyślnie używają usługi Delta Lake.
Obsługiwane zmiany typu
Typy można poszerzyć zgodnie z następującymi regułami:
Source type | Obsługiwane szersze typy |
---|---|
byte |
short , int , long , decimal , double |
short |
int , long , decimal , double |
int |
long , , decimal double |
long |
decimal |
float |
double |
decimal |
decimal z większą precyzją i skalą |
date |
timestampNTZ |
Aby uniknąć przypadkowego zmiany wartości całkowitych na dziesiętne, należy ręcznie zatwierdzić zmiany typu z byte
, short
, int
lub long
na decimal
lub double
.
Uwaga
Podczas zmiany dowolnego typu liczbowego na decimal
całkowita precyzja musi być równa lub większa niż precyzja początkowa. Jeśli również zwiększysz skalę, łączna precyzja musi wzrosnąć o odpowiedni stopień.
Minimalną wartością docelową dla typów byte
, short
i int
jest decimal(10,0)
. Minimalną wartością docelową long
jest decimal(20,0)
.
Jeśli chcesz dodać dwa miejsca dziesiętne do pola z decimal(10,1)
, minimalna wartość docelowa to decimal(12,3)
.
Zmiany typu są obsługiwane w przypadku kolumn najwyższego poziomu i pól zagnieżdżonych wewnątrz struktur, map i tablic.
Włączanie rozszerzania typu
Możesz włączyć rozszerzanie typów w istniejącej tabeli, ustawiając delta.enableTypeWidening
właściwość tabeli na :true
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')
Podczas tworzenia tabeli można również włączyć rozszerzanie typu:
CREATE TABLE T(c1 INT) TBLPROPERTIES('delta.enableTypeWidening' = 'true')
Ważne
Po włączeniu rozszerzania typu ustawia ona funkcję typeWidening-preview
tabeli , która uaktualnia protokoły czytników i składników zapisywania. Do interakcji z tabelami z włączonym rozszerzaniem typu należy użyć środowiska Databricks Runtime 15.2 lub nowszego. Jeśli klienci zewnętrzni również wchodzą w interakcję z tabelą, sprawdź, czy obsługują tę funkcję tabeli. Zobacz artykuł Jak usługa Azure Databricks zarządza zgodnością funkcji usługi Delta Lake?.
Ręczne stosowanie zmiany typu
Użyj polecenia , ALTER COLUMN
aby ręcznie zmienić typy:
ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>
Ta operacja aktualizuje schemat tabeli bez ponownego zapisywania bazowych plików danych.
Rozszerzenie typów z automatyczną ewolucją schematu
Ewolucja schematu współpracuje z rozszerzeniem typu w celu zaktualizowania typów danych w tabelach docelowych w celu dopasowania do typu danych przychodzących.
Uwaga
Bez włączonego rozszerzania typu ewolucja schematu zawsze próbuje bezpiecznie obniżyć dane w celu dopasowania typów kolumn w tabeli docelowej. Jeśli nie chcesz automatycznie rozszerzać typów danych w tabelach docelowych, wyłącz rozszerzanie typu przed uruchomieniem obciążeń z włączoną ewolucją schematu.
Aby rozszerzyć typ danych kolumny przy użyciu ewolucji schematu, należy spełnić następujące warunki:
- Polecenie używa
INSERT
polecenia lubMERGE INTO
. - Polecenie jest uruchamiane z włączoną automatyczną ewolucją schematu.
- Tabela docelowa ma włączone rozszerzanie typu.
- Typ kolumny źródłowej jest szerszy niż typ kolumny docelowej.
- Rozszerzenie typu obsługuje zmianę typu.
Niezgodność typów, które nie spełniają wszystkich tych warunków, są zgodne z normalnymi regułami wymuszania schematu. Zobacz Wymuszanie schematu.
Wyłączanie funkcji tabeli rozszerzającej typ
Można zapobiec przypadkowemu rozszerzaniu typu w tabelach z obsługą, ustawiając właściwość na :false
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')
To ustawienie uniemożliwia zmianę typu w tabeli w przyszłości, ale nie powoduje usunięcia funkcji tabeli rozszerzającej typ ani cofania zmienionych typów.
Jeśli musisz całkowicie usunąć funkcje tabeli rozszerzającej typ, możesz użyć DROP FEATURE
polecenia , jak pokazano w poniższym przykładzie:
ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]
Po usunięciu rozszerzenia typu wszystkie pliki danych, które nie są zgodne z bieżącym schematem tabeli, zostaną przepisane. Zobacz Usuwanie funkcji tabeli delty.