Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőre vonatkozik:
Databricks SQL
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_BINARYaz 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_LCASEaz Azure Databricks azonosítóihoz használt rendezés.Például:
ORDER BY col COLLATE UTF8_LCASEegyenértékű a
ORDER BY LOWER(col) COLLATE UTF8_BINARYUNICODE
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.
localenagy- és kisbetű érzékenység nélkül.- language_code: Kétbetűs ISO 639-1 nyelvi kód.
- script_code: Négybetűs ISO 15924-es szkriptkód.
- country_code: Hárombetűs ISO 3166-1 alfa-3 országkód.
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:
Databricks SQL
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:
Databricks SQL
Databricks Runtime 16.2 és újabbMegadhatja
RTRIM-et egyszer, valamintCS-et vagyCI-t, illetveAS-at vagyAI-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ésCREATE FUNCTION:- Az alapértelmezett rendezés a létrehozott vagy módosított objektum alapértelmezett rendezése.
- Ha nincs megadva
DEFAULT COLLATIONzáradék, az alapértelmezett rendezésUTF8_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.
Kifejezett
A rendezés explicit módon van hozzárendelve egy kifejezéssel rendelkező
collatesztringhez.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 DEImplicit
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', ',')Alapértelmezett
Egy
STRINGkonstans, névvel ellátott vagy meg nem nevezett paraméterjelölő, vagy egySTRINGmá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.
Egyik sem
Egy
STRINGfüggvény, operátor vagy halmazművelet (példáulUNION) eredménye, amely egynélSTRINGtö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:
megfelel a fenti definícióknak
A rendezés és az elsőbbség a megadott módon történik.
egyetlen
STRINGparaméterrel rendelkező függvény vagy operátor, amely egySTRING-et ad visszaA rendezés és az elsőbbség a
STRINGparaméter szerinti.egy függvény vagy operátor két vagy több
STRINGparaméterrelugyanazokkal a rendezésekkel és elsőbbséggel
A rendezés és az elsőbbség a
STRINGparaméterek szerint van meghatározva.különböző rendezésekkel vagy prioritásokkal
Legyen
C1ésC2legyenek különböző rendezések, ésDlegyen 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