Megosztás:


Egybevetés

A következőre vonatkozik:be van jelölve Databricks SQL be van jelölve Databricks Runtime 16.1 és újabb

A rendezés olyan szabályok halmaza, amelyek meghatározzák a karakterlánc-összehasonlítások végrehajtását. A karakterláncok összehasonlítási sorrendekkel kis- és nagybetű érzékenység, ékezetérzékenység vagy záró szóköz érzéketlenség nélkül hasonlíthatók össze, illetve nyelvspecifikus sorrendben történő rendezésre használhatók.

Az Azure Databricks sztringjei UTF-8 kódolású Unicode-karakterekként jelennek meg. Az Azure Databricks alapértelmezés szerint a sztringeket a bináris UTF8-ábrázolásuk alapján hasonlítja össze. Ezt nevezik UTF8_BINARY szerinti rendezésnek. UTF8_BINARY összehasonlítások sok esetben gyorsak és megfelelőek, de nem minden alkalmazáshoz alkalmasak, különösen azokhoz, amelyek nyelvérzékeny rendezést vagy összehasonlítást igényelnek.

A nyelvtudatos összehasonlításokon kívül gyakori használati eset a kis- és nagybetűk figyelmen kívül hagyása. Az Azure Databricks-nek van kifejezetten erre a célra a UTF8_LCASE rendezése. A karakterláncokat kisbetűssé alakítja, mielőtt a UTF8_BINARY sorolási sorrend használatával összehasonlítja őket.

Nyelvtudatos összehasonlítások esetén az Azure Databricks a következő technológiákat alkalmazza:

  • A Unicode (ICU) könyvtár nemzetközi összetevői az összehasonlítás kiszámítására
  • Közös Területi Adatgyűjtő (CLDR) táblák az adott területi beállítások szerinti rendezéshez.
  • Unicode Locale Data Markup Language (LDML) a rendezés belső kódolásához.

Ezek a technológiák az SQL-utasításokban használható nevesített rendezések halmazában vannak beágyazva.

Megjegyzés:

A Delta Lake-táblákkal végzett rendezésekkel kapcsolatos korlátozásokért lásd a Korlátozások című témakört.

Rendezési nevek

Mivel a rendezések LDML-specifikációjuk alapján történő azonosítása összetett és nehézkes lehet, az Azure Databricks könnyebben használható, elnevezett rendszerösszesítésekkel rendelkezik.

Szintaxis

{ UTF8_BINARY |
  UTF8_LCASE |
  { UNICODE | locale } [ _ modifier [...] ] }

locale
  language_code [ _ script_code ] [ _ country_code ]

modifier
  { CS | CI | AS | AI | RTRIM }
  • UTF8_BINARY

    Meta-helyi bináris rendezési eljárás, amely az UTF-8 bájtos ábrázolás alapján hasonlítja össze a sztringeket bájtonkénti összehasonlítással. A(z) UTF8_BINARY az alapértelmezett és legkönnyebb sorrend a karakterláncok összehasonlításához az Azure Databricksben.

    Ebben a rendezésben "A" (x'65') < "B" (x'66') < … < 'Z' (x'90').

    Azonban a 'Z' (x'90') < 'a' (x'97'), és az 'A' (x'65') <> 'a' (x'97').

    Ezenkívül az olyan karakterek, mint az "Ä" (x'C384'), előrébb állnak, mint a "Z" és a "z".

  • UTF8_LCASE

    Egy könnyű meta-helyi beállítású, kisbetű/nagybetű érzéketlen rendező, amely a karakterláncokat az UTF-8 bájtos ábrázolásukkal hasonlítja össze, miután a karakterláncokat kisbetűssé alakította.

    UTF8_LCASE az Azure Databricks azonosítóihoz használt rendezés.

    Például:

    ORDER BY col COLLATE UTF8_LCASE
    

    egyenértékű a

    ORDER BY LOWER(col) COLLATE UTF8_BINARY
    
  • UNICODE

    Az ICU alapértelmezett területe.

    Ez a CLDR-ben "gyökér" területi beállításként (LDML-specifikáció: "und-u") ismert rendezés nyelvi agnosztikus sorrendet ír elő, amely összességében intuitívnak próbál lenni. Ebben a rendezésben a hasonló karakterek csoportosítva vannak. Például: 'a' < 'A' < 'Ä' < 'b'. Az "A" nem egyenértékű az "a"-sel. Ezért a rendezés érzékeny a kis- és nagybetűkre. Az "a" nem tekinthető egyenértékűnek az "ä" kifejezéssel. Ezért a rendezés hangsúlyérzékeny.

  • színhely

    A CLDR-táblák alapján helyi sajátosságokat figyelembe vevő rendezés.

    A területi beállítás nyelvi kódként, opcionális szkriptkódként és opcionális országkódként van megadva. locale nagy- és kisbetű érzékenység nélkül.

  • módosító

    Meghatározza a rendezési viselkedést a kis- és nagybetűk érzékenységével és az ékezetek érzékenységével kapcsolatban.

    • CS: Kis- és nagybetűk megkülönböztetése. Az alapértelmezett viselkedés.
    • CI: Nem érzékeny a kis- és nagybetűkre.
    • AS: Ékezetérzékeny. Az alapértelmezett viselkedés.
    • AI: Ékezetekre érzéketlen.

    A következőre vonatkozik:pipával jelölve: igen Databricks SQL pipával jelölve: igen Databricks Runtime 16.2 és újabb

    • RTRIM: Záró szóköz érzéketlen. Az összehasonlítás előtt levágja a záró szóközöket ('u0020').

    A következőre vonatkozik:pipával jelölve: igen Databricks SQL pipával jelölve: igen Databricks Runtime 16.2 és újabb

    Megadhatja RTRIM-et egyszer, valamint CS-et vagy CI-t, illetve AS-at vagy AI-et legfeljebb egyszer és bármilyen sorrendben. Maguk a módosítók nem különböztetik meg a kis- és nagybetűket.

Rendezés feldolgozásakor az Azure Databricks az alapértelmezett értékek eltávolításával normalizálja a rendezési neveket. Például a SR_CYR_SRN_CS_AS normalizálva SR-re.

A támogatott rendezések listáját a Támogatott rendezések című témakörben találja.

Példák

-- You can fully qualify collations, and case doesn't matter.
system.builtin.unicode

-- Since all collations are system defined you don't need to qualify them
unicode

-- Using 2-letter language code only for german collation
DE

-- Using 2-letter language code and 3-letter country code for french-canadian collation
-- It is common to use lower case 2-letter language codes and upper case 3-letter country codes
-- But collation names are case insensitive
fr_CAN

-- Using 2-letter language code and 4-letter script code and 3-letter country code for traditional chinese in Macao
zh_Hant_MAC

-- Using a 2 letter german language code and 2 modifiers for case insensitive and accent insensitive
-- So 'Ä', 'A', and 'a' are all considered equal
de_CI_AI

-- Using back ticks is allowed, but unnecessary for builtin collations
`UTF8_BINARY`

Alapértelmezett koláció

Az alapértelmezett rendezés akkor alkalmazandó, amikor STRING literálokat, paraméterjelölőket és STRING paraméterek nélküli, sztringeket előállító függvényeket használ, továbbá, amikor oszlop-, mező- vagy változótípusokat COLLATE klauzula nélkül határoz meg.

Az alapértelmezett rendezés az alábbi módok egyikével lesz származtatva:

  • Az olyan DDL-utasítások esetében, mint a ALTER TABLE, CREATE VIEW, CREATE TABLEés CREATE FUNCTION:

    • Az alapértelmezett rendezés a létrehozott vagy módosított objektum alapértelmezett rendezése.
    • Ha nincs megadva DEFAULT COLLATION záradék, az alapértelmezett rendezés UTF8_BINARY.
  • A DML (UPDATE, , DELETE FROM, INSERT), MERGE INTOés a Lekérdezés esetében az alapértelmezett rendezés az UTF8_BINARY.

Rendezés elsőbbsége

Annak eldöntéséhez, hogy az Azure Databricks melyik rendezési szabályt használja egy adott sztringhez, a rendezési elsőbbséget meghatározó szabályokat határozza meg.

A szabályok 4 prioritási szintet rendelnek a kollációkhoz.

  1. Kifejezett

    A rendezés explicit módon van hozzárendelve egy kifejezéssel rendelkezőcollate sztringhez.

    Példák

    -- Force fast binary collation to check whether a vin matches a Ferrari
    vin COLLATE UTF8_BINARY LIKE 'ZFF%'
    
    -- Force German collation to order German first names
    ORDER BY vorname COLLATE DE
    
  2. Implicit

    A rendezést implicit módon hozzárendeli az oszlopnév, a mezőnév, az oszlop aliasa, a változónév vagy a paraméternév-hivatkozás . Ez magában foglalja az alkérdezés eredményét, ha a rendezés nem Nincs.

    Példák

    -- Use the collation of the column as it was defined
    employee.name LIKE 'Mc%'
    
    -- Use the collation of the variable as it was defined.
    translate(session.tempvar, 'Z', ',')
    
  3. Alapértelmezett

    Egy STRING konstans, névvel ellátott vagy meg nem nevezett paraméterjelölő, vagy egy STRING másik típusból származó függvény által előállított.

    Példák

    -- A literal string has the default collation
    'Hello'
    
    -- :parm1 is a parameter marker using session default collation
    EXECUTE IMMEDIATE 'SELECT :parm1' USING 'Hello' AS parm1;
    
    -- ? is a parameter marker using session default collation
    EXECUTE IMMEDIATE 'SELECT ?' USING 'Hello';
    
    -- The result of a cast of a non-STRING to a STRING is a STRING with the default collation
    CAST(5 AS STRING)
    
    -- The date is converted to a string using the default collation
    to_char(DATE'2016-04-08', 'y')
    
    -- The collation of the session_user STRING is the default collation
    session_user()
    

    A hozzárendelt rendezés az Alapértelmezett rendezés.

  4. Egyik sem

    Egy STRING függvény, operátor vagy halmazművelet (például UNION) eredménye, amely egynél STRING több argumentumot vesz igénybe, és különböző implicit rendezésekkel rendelkezik.

    Példák

    -- Concatenating two strings with different explicit collations results in no collation
    SELECT fr || de AS freutsch FROM VALUES('Voulez vous ' COLLATE FR), 'Kartoffelsupp...' COLLATE DE) AS T(fr, de)
    
    -- A union of two strings with different excplicit collations results in no collation
    SELECT 'Voulez vous ' COLLATE FR UNION ALL SELECT 'Kartoffelsupp...' COLLATE DE
    

Rendezés származtatása

Egy STRING eredmény származtatásakor a rendezési sorrend szabályai az alábbi módokon lesznek alkalmazva:

Ha a kifejezés:

  1. megfelel a fenti definícióknak

    A rendezés és az elsőbbség a megadott módon történik.

  2. egyetlen STRING paraméterrel rendelkező függvény vagy operátor, amely egy STRING-et ad vissza

    A rendezés és az elsőbbség a STRING paraméter szerinti.

  3. egy függvény vagy operátor két vagy több STRING paraméterrel

    1. ugyanazokkal a rendezésekkel és elsőbbséggel

      A rendezés és az elsőbbség a STRING paraméterek szerint van meghatározva.

    2. különböző rendezésekkel vagy prioritásokkal

      Legyen C1 és C2 legyenek különböző rendezések, és D legyen az alapértelmezett rendezés. Az előzményt és a rendezést a következő táblázat határozza meg:

      Összehasonlítás és elsőbbség C1 Kifejezett C1 Implikált D alapértelmezett Egyik sem
      C2 Explicit Hiba C2 Kifejezett C2 Kifejezett C2 Kifejezett
      C2 Implicit Explicit C1 Egyik sem C2 Implicit Egyik sem
      D alapértelmezett C1 Kifejezett C1 Implikált D alapértelmezett Egyik sem
      Egyik sem C1 Kifejezett Egyik sem Egyik sem Egyik sem

Példák

> SELECT 'hello' = 'hello   ' COLLATE UNICODE_RTRIM;
  true

> CREATE TABLE words(fr STRING COLLATE FR, de STRING COLLATE DE, en STRING COLLATE EN);
> INSERT INTO words VALUES ('Salut', 'Hallo', 'Hello');

-- A literal string has the default collation
> SELECT collation('Ciao');
  UTF8_BINARY

-- A function producing a STRING has the default collation
> SELECT collation(user());
  UTF8_BINARY

-- Function modifying a STRING passes the collation through
> SELECT collation(upper('Ciao'));
  UTF8_BINARY

-- Implicit collation (French) wins over default collation
> SELECT collation(fr || 'Ciao') FROM words;
  FR

-- Explicit collation (French) wins over implicit collation (German)
> SELECT collation('Salut' COLLATE FR || de) FROM words;
  FR

-- Implicit collation German collides with implicit collation French
-- The result is no collation
> SELECT collation(de || fr) FROM words;
  null

-- Explicit collation (French) wins over default collation (Italian)
> SELECT collation('Salut' COLLATE FR || 'Ciao');
  FR

-- Explicit collation (French) collides with explicit collation (German)
> SELECT collation('Salut' COLLATE FR || 'Hallo' COLLATE DE);
  COLLATION_MISMATCH.EXPLICIT

-- The explicit collation wins over no collation
> SELECT collation('Ciao' COLLATE IT || (fr || de)) FROM words;
  IT

-- The implict collation (English) does not win over None
> SELECT collation(en || (fr || de)) FROM words;
  null

-- The explicit collation (English) wins over Implicit collation anywhere in the expression
> SELECT collation((fr || ltrim('H' COLLATE EN, fr)) || fr) FROM words;
  EN