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šší.

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, , 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í celého čísla values na desetinná čísla, 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 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.enableTypeWideningtable 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 nebo MERGE 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.