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, , decimaldouble
short int, , long, , decimaldouble
int long, , decimaldouble
long decimal
float double
decimal decimal z większą precyzją i skalą
date timestampNTZ

Aby uniknąć przypadkowego podwyższania poziomu wartości całkowitych do liczby dziesiętnej, należy ręcznie zatwierdzić zmiany typu z byte, , shortlub intdo decimal lub long double.

Uwaga

W przypadku zmiany dowolnego typu liczbowego na decimalwartość całkowita precyzja musi być równa lub większa niż precyzja początkowa. Jeśli zwiększysz również skalę, łączna precyzja musi wzrosnąć o odpowiednią ilość.

Minimalną wartością docelową dla bytetypów , shorti int jest decimal(10,0). Minimalny element docelowy dla long elementu to decimal(20,0).

Jeśli chcesz dodać dwa miejsca dziesiętne do pola z wartością decimal(10,1), minimalną wartością docelową jest 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-previewtabeli , 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 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 lub MERGE 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.