Sdílet prostřednictvím


Rozšíření typu

Důležité

Tato funkce je ve verzi Public Preview v Databricks Runtime 15.2 a vyšší.

Tabulky s povoleným rozšířením typu umožňují změnit datové typy sloupců na širší typ bez přepsání podkladových datových souborů. Typy sloupců můžete změnit ručně nebo pomocí vývoje schématu vyvíjet typy sloupců.

Rozšíření typu vyžaduje Delta Lake. Všechny spravované tabulky katalogu Unity používají ve výchozím nastavení Delta Lake.

Podporované změny typu

Typy můžete rozšířit podle následujících pravidel:

Source type Podporované širší typy
byte short, int, long, decimal, double
short int, long, decimal, double
int long, , decimaldouble
long decimal
float double
decimal decimal s větší přesností a škálováním
date timestampNTZ

Chcete-li zabránit náhodnému povýšení celočíselné hodnoty na desetinná místa, je nutné ručně potvrdit změny typu z byte, short, intnebo long na decimal nebo double.

Poznámka:

Při změně libovolného číselného typu na decimalmusí být celková přesnost rovna nebo větší než počáteční přesnost. Pokud také zvětšíte měřítko, celková přesnost se musí zvýšit o odpovídající množství.

Minimální cíl pro typy byte, shorta int je decimal(10,0). Minimální cíl pro long je decimal(20,0).

Pokud chcete do pole s decimal(10,1)přidat dvě desetinná místa, je minimální cíl decimal(12,3).

Změny typu jsou podporovány u sloupců a polí nejvyšší úrovně vnořených uvnitř struktur, map a polí.

Povolení rozšíření typu

Rozšíření typu u existující tabulky můžete povolit nastavením vlastnosti delta.enableTypeWidening tabulky na true:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')

Při vytváření tabulky můžete také povolit rozšíření typu:

  CREATE TABLE T(c1 INT) TBLPROPERTIES('delta.enableTypeWidening' = 'true')

Důležité

Když povolíte rozšíření typu, nastaví funkce tabulky typeWidening-preview, která upgraduje protokoly pro čtení a zápis. Pokud chcete pracovat s tabulkami s povoleným rozšířením typu, musíte použít Databricks Runtime 15.2 nebo vyšší. Pokud s tabulkou pracují i externí klienti, ověřte, že tuto funkci tabulky podporují. Viz Jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake?.

Ruční použití změny typu

ALTER COLUMN Pomocí příkazu ručně změňte typy:

ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>

Tato operace aktualizuje schéma tabulky bez přepsání podkladových datových souborů.

Rozšiřování typů s automatickým vývojem schématu

Vývoj schématu funguje s rozšířením typu pro aktualizaci datových typů v cílových tabulkách tak, aby odpovídalo typu příchozích dat.

Poznámka:

Bez povoleného rozšíření typu se vývoj schématu vždy pokouší bezpečně downcastovat data tak, aby odpovídala typům sloupců v cílové tabulce. Pokud nechcete v cílových tabulkách automaticky rozšiřovat datové typy, zakažte rozšíření typu před spuštěním úloh s povoleným vývojem schématu.

Pokud chcete použít vývoj schématu k rozšíření datového typu sloupce, musíte splnit následující podmínky:

  • Příkaz používá INSERT nebo MERGE INTO.
  • Příkaz se spustí s povoleným automatickým vývojem schématu.
  • Cílová tabulka má povolené rozšiřování typu.
  • Typ zdrojového sloupce je širší než cílový typ sloupce.
  • Rozšíření typu podporuje změnu typu.

Neshody typů, které nesplňují všechny uvedené podmínky, podléhají normálním pravidlům vynucení schématu. Podívejte se na vynucení schématu.

Zakázat funkci rozšiřování typu v tabulce

Můžete zabránit nechtěnému rozšíření typu u povolených tabulek nastavením vlastnosti na false:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')

Toto nastavení brání budoucím změnám typu v tabulce, ale neodstraňuje funkci rozšiřování typů tabulky ani nezruší změněné typy.

Pokud potřebujete úplně odebrat funkce rozšiřující tabulky typu, můžete použít příkaz DROP FEATURE, jak je znázorněno v následujícím příkladu:

 ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]

Při odstranění rozšiřování typu se přepíší všechny datové soubory, které neodpovídají aktuálnímu schématu tabulky. Viz vlastnosti tabulky Drop Delta.