Megosztás:


A Delta Lake kollációs támogatása

A Delta-táblák sztringmezőinek gyűjteményét (kollációit) megadhatja, hogy szabályozza, hogyan viselkedjen a sztringek összehasonlítása és rendezése, mint például a kis- és nagybetűk érzéketlen egyezésének támogatása vagy a területspecifikus rendezés engedélyezése. Ehhez a Databricks Runtime 16.4 LTS és újabb verziója szükséges.

A rendezési típusok, az elnevezési konvenciók és az elsőbbségi szabályok részletes magyarázata olvasható a(z) Rendezés részben.

Alapértelmezés szerint a Delta Lake a karakterlánc mezők osztályozási sorrendjét UTF8_BINARY-ra állítja.

Fontos

A szortírozás engedélyezése hozzáadja az collations írási funkciót a Delta-táblához, ami hatással van a külső olvasó alkalmazásokkal és egyéb platform funkciókkal való kompatibilitásra. Tekintse át a Korlátozások szakaszát, mielőtt engedélyezi a karaktersorrend használatát az éles táblákon.

Táblázat létrehozása rendezéssel

Új tábla létrehozásakor oszlopszinten is megadhatja a rendezést. A rendezés a legfelső szintű sztringoszlopokra és a beágyazott típusok sztringmezőire alkalmazható:

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

Megjegyzés:

MAP kulcsok nem használhatnak kollációt. Csak az MAP értékek támogatják a csoportosított sztringeket.

Megváltoztatja az összerendelést egy meglévő oszlopon

Egy meglévő oszlop rendezési beállítását a következővel ALTER TABLEmódosíthatja:

-- Set a column to case-insensitive collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE

-- Revert a column to the default binary collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Statisztikák és adatelrendezés frissítése a rendezés módosítása után

Az oszlopok rendezésének módosítása nem írja át a meglévő adatokat, és nem frissíti a statisztikákat. A lekérdezések azonnal helyes eredményeket adnak vissza az új rendezés alatt, de a fájlok kihagyása és a fürtözés kevésbé hatékony lehet, amíg meg nem teszi az alábbi lépéseket:

  1. Frissítse az oszlop fájlugrási statisztikáit:
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Ha a tábla folyékony fürtözést használ, írja át újra a fürtözési elrendezést:
   OPTIMIZE FULL my_table
  1. Ha a tábla ZORDER-t használ, tiltsa le a növekményes optimalizálást, és írja át az összes fájlt:
   SET spark.databricks.optimize.incremental = false;
   OPTIMIZE my_table ZORDER BY zorder_column;

Ezeknek a lépéseknek a kihagyása nem eredményez helytelen eredményeket, de csökkentheti az előzményadatok lekérdezési teljesítményét a következő teljes újraírásig.

Az Azure Databricks mindig tiszteletben tartja a kollációt a lekérdezési eredményekben.

Táblázat rendezésének letiltása

A rendezési táblázat funkció eltávolításához először állítsa vissza az összes csoportosított oszlopot a következő értékre UTF8_BINARY:

-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Ezután törölje a táblafunkciót:

ALTER TABLE my_table DROP FEATURE collations

További részletekért lásd a Delta Lake tábla funkcióról és a táblaprotokoll visszalépéséről.

Sémafejlődés és rendezés

Ha a sémafejlődés olyan oszlopokat ad hozzá vagy egyesít, amelyekben rendezés van megadva, a következő szabályok érvényesek:

  • Ha már létezik forrásoszlop a céltáblában, a céltábla rendezése megmarad az adott oszlophoz. A forrásoszlop rendezése figyelmen kívül lesz hagyva.
  • Ha egy forrásoszlop új, és van megadva rendezés, a céltábla alkalmazza az új oszlop rendezést.
  • Ha a céltáblában még nincs engedélyezve a collations táblafunkció, a csoportosított oszlop hozzáadása automatikusan lehetővé teszi.

Korlátozások

Az alábbi korlátozások vonatkoznak azokra a Delta-táblákra, amelyeken engedélyezve van a rendezés:

Kompatibilitás és együttműködés:

  • Azok a külső olvasók, akik nem ismerik fel a collations táblafunkciót, visszaállnak UTF8_BINARY-re, amely hibás rendezési sorrendeket vagy összehasonlításokat eredményezhet.
  • A deltamegosztás nem támogatott a rendezéssel rendelkező táblák esetében
  • Az UniForm nem támogatott kollációval rendelkező táblák esetén.
  • A Databricks Runtime által nem felismert rendezéssel külsőleg létrehozott deltatáblák kivételt képeznek lekérdezéskor
  • A Scalához vagy a Pythonhoz készült OSS Delta Lake API-k nem támogatják a rendezést. Spark SQL- vagy DataFrame API-k használata

Lekérdezési és funkciókorlátozások:

  • Az csoportosított oszlopok nem használhatók kényszerekben CHECK
  • Az csoportosított oszlopokra nem lehet hivatkozni a létrehozott oszlopkifejezésekben
  • Az összevont oszlopok nem használhatók Bloom-szűrő indexekkel.
  • Az csoportosított oszlopokra nem lehet hivatkozni a strukturált streamelési állapotalapú lekérdezésekben (összesítések, illesztések, deduplikációk)
  • A MAP kulcs nem lehet csoportosított sztring. Csak a MAP értékek támogatják a rendezést