Podpora seřazení pro Delta Lake

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:

  1. Aktualizujte statistiky přeskakování souborů pro sloupec:
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Pokud vaše tabulka používá liquid clustering, přepište rozložení shlukování:
   OPTIMIZE FULL my_table
  1. 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 na UTF8_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 CHECK omezení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íč MAP nemůže být tříděný řetězec. Kolace podporují pouze MAP hodnoty.

Další zdroje informací