Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V Databricks Runtime 16.4 LTS a novějším zadejte pro řetězcová pole v tabulkách Delta Lake kolaci, abyste mohli na úrovni jednotlivých sloupců řídit porovnávání řetězců a způsob řazení, například povolit porovnávání bez rozlišování velkých a malých písmen nebo řazení zohledňující národní prostředí.
Úplné vysvětlení typů kolace, konvencí pojmenování a pravidel priority najdete v části Kolace.
Delta Lake ve výchozím nastavení nastaví kolaci pro pole řetězců na UTF8_BINARY.
Important
Povolení kolace přidá collations funkci zapisovací tabulky do tabulky Delta Lake, která ovlivňuje kompatibilitu s externími čtenáři a dalšími funkcemi platformy. Před povolením kolace v produkčních tabulkách si prostudujte část Omezení.
Vytvoření tabulky s kolací
Kolaci můžete zadat na úrovni sloupce při vytváření nové tabulky. Kolaci lze použít u sloupců řetězců nejvyšší úrovně a řetězcových polí uvnitř vnořených typů:
CREATE TABLE catalog.schema.my_table (
id BIGINT,
name STRING COLLATE UTF8_LCASE,
metadata STRUCT<label: STRING COLLATE UNICODE>,
tags ARRAY<STRING COLLATE UTF8_LCASE>,
properties MAP<STRING, STRING COLLATE UTF8_LCASE>
) USING delta
Note
MAP klíče nesmí používat třídění. Pouze MAP hodnoty podporují kompletované řetězce.
Změna kolace na existujícím sloupci
Kolaci existujícího sloupce můžete změnit pomocí ALTER TABLE.
Například chcete-li u sloupce nastavit kolaci nerozlišující velká a malá písmena:
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE
Pokud chcete například vrátit sloupec na výchozí binární kolaci:
--
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Aktualizace statistiky a rozložení dat po změně kolace
Změna kolace sloupce nemění stávající data ani neaktualizuje statistiky. Dotazy okamžitě vrací správné výsledky podle nového uspořádání, avšak přeskočení souborů a clustering mohou být méně efektivní, dokud neprovedete následující kroky:
- Aktualizujte statistiky přeskakování souborů pro sloupec:
ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
- Pokud vaše tabulka používá liquid clustering, přepište rozložení shlukování:
OPTIMIZE FULL my_table
- Pokud tabulka používá ZORDER, vypněte přírůstkovou optimalizaci a přepište všechny soubory:
SET spark.databricks.optimize.incremental = false;
OPTIMIZE my_table ZORDER BY zorder_column;
Přeskočení těchto kroků nezpůsobí nesprávné výsledky, ale může snížit výkon dotazů na historická data až do dalšího úplného přepsání.
Azure Databricks vždy respektuje kolaci ve výsledcích dotazů.
Vypněte řazení pro tabulku
Pokud chcete odebrat funkci kompletovací tabulky, nastavte všechny kompletované sloupce zpět na UTF8_BINARY.
Nejprve spusťte tento příkaz pro každý kompletovaný sloupec:
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Poté přidejte funkci Tabulka:
ALTER TABLE my_table DROP FEATURE collations
Podrobnosti najdete v tématu Odstranění tabulky Delta Lake a snížení verze protokolu tabulky.
Vývoj schémat a kolace
Pokud vývoj schématu přidává nebo slučuje sloupce, které mají zadanou kolaci, platí následující pravidla:
- Pokud zdrojový sloupec již v cílové tabulce existuje, zachovají se kolace cílové tabulky pro tento sloupec. Srovnávání zdrojového sloupce se ignoruje.
- Pokud je zdrojový sloupec nový a má zadanou kolaci, cílová tabulka převezme tuto kolaci pro nový sloupec.
- Pokud cílová tabulka ještě nemá povolenou funkci tabulky
collations, přidání uspořádaného sloupce ji automaticky povolí.
Omezení
Následující omezení platí pro tabulky Delta Lake s povolenou kolací:
Kompatibilita a interoperabilita:
- Externí čtenáři, kteří funkci tabulky nerozpoznají
collations, spadnou zpět naUTF8_BINARY, což může vést k nesprávným pořadím řazení nebo porovnáním. - OpenSharing nepodporuje sdílení jednotlivých oddílů v jiných než výchozích sloupcích kolace. Místo toho tabulku sdílejte.
- UniForm není podporován u tabulek s kolací.
- Tabulky Delta Lake vytvořené externě s kolací, kterou Databricks Runtime nerozpozná, vyvolá výjimku při dotazování.
- Rozhraní API OSS Delta Lake pro Scala nebo Python nepodporují třídění. Použijte Spark SQL nebo DataFrame API.
Omezení dotazů a funkcí:
- Kompletované sloupce nelze použít v
CHECKomezeních. - Kompletované sloupce nelze odkazovat ve generovaných výrazech sloupců.
- Kompletované sloupce nelze použít s indexy filtru bloom (zastaralé)
- Na kompletované sloupce nejde odkazovat ve stavových dotazech strukturovaného streamování (agregace, spojení, odstranění duplicitních dat).
- Klíč
MAPnemůže být tříděný řetězec. Kolace podporují pouzeMAPhodnoty.