Rozšíření typu
Důležité
Tato funkce je ve verzi Public Preview v Databricks Runtime 15.2 a vyšší.
Tables s povoleným rozšířením typu umožňují změnit column datových typů na širší typ, aniž byste museli přepisovat podkladové datové soubory. Typy column můžete změnit ručně, nebo pomocí vývoje schema vyvíjet typy column.
Rozšíření typu vyžaduje Delta Lake. Všechny Catalog spravované jednotky tables 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 , , decimal double |
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í celého čísla values na desetinná čísla, je nutné ručně potvrdit změny typu z byte
, short
, int
nebo long
na decimal
nebo double
.
Poznámka:
Při změně libovolného číselného typu na decimal
musí 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
, short
a 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 columns na nejvyšší úrovni a u polí vnořených do struktur, map a seznamů.
Povolení rozšíření typu
Rozšíření typu u existujícího table můžete povolit nastavením vlastnosti delta.enableTypeWidening
table na true
:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')
Během vytváření table 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í se funkce table a typeWidening-preview
, která upgraduje protokoly pro čtení a zápis. Pokud chcete pracovat s tables s povoleným rozšířením typu, musíte použít Databricks Runtime 15.2 nebo novější. Pokud externí klienti také pracují s table, ověřte, že tuto funkci table 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 tableschema bez přepsání podkladových datových souborů.
Rozšiřte typy s automatickým vývojem schema
Schema evoluce pracuje s rozšiřováním typů na update datové typy v cíli tables, aby odpovídaly typu příchozích dat.
Poznámka:
Bez povolení rozšíření typu se vývoj u schema vždy pokusí bezpečně převést data na nižší úroveň, aby odpovídala typům column v cílovém table. Pokud nechcete automaticky rozšířit datové typy v cílovém tables, zakažte rozšíření typu před spuštěním úloh s povoleným vývojem schema.
Pokud chcete použít schema vývoj k rozšíření datového typu column, musíte splnit následující podmínky:
- Příkaz používá
INSERT
neboMERGE INTO
. - Příkaz běží s povoleným automatickým vývojem schema.
- Cílový table má aktivované rozšíření typu.
- Zdrojový typ column je širší než cílový typ column.
- Rozšíření typu podporuje změnu typu.
Neshody typů, které nesplňují všechny tyto podmínky, se řídí normálními pravidly vynucení schema. Viz Schema vymáhání.
Zakázat funkci rozšiřující type table
Nechtěnému rozšíření typu u povoleného tables můžete zabránit nastavením vlastnosti na false
:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')
Toto nastavení zabraňuje budoucím změnám typu table, ale remove typ rozšiřující table funkce nebo vrácení zpět typů, které se změnily.
Pokud potřebujete úplně remove typ rozšiřujících table funkcí, 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 upuštění od rozšiřování typu se přepíší všechny datové soubory, které neodpovídají aktuálnímu tableschema. Viz funkce Drop Delta table.