Sortering
Viktig
Den här funktionen finns i offentlig förhandsversion.
gäller för: Databricks Runtime 16.1 och senare
En sortering är en uppsättning regler som avgör hur strängjämförelser utförs. Kollationeringar används för att jämföra strängar på ett sätt som är okänsligt för skiftläge eller accent, eller för att sortera strängar i en specifik språkanpassad ordning.
Strängar i Azure Databricks representeras som UTF-8 kodade Unicode-tecken.
Som standard jämför Azure Databricks strängar med deras binära UTF8-representation. Detta kallas UTF8_BINARY
sortering.
UTF8_BINARY
jämförelser är snabba och lämpliga i många fall, men kanske inte är lämpliga för alla program, särskilt de som kräver språkmedveten sortering eller jämförelser.
Förutom språkmedvetna jämförelser är ett vanligt användningsfall att kräva skiftlägesinsensitiva jämförelser.
Azure Databricks har specifikt UTF8_LCASE
-sorteringen för detta ändamål.
Den konverterar strängar till gemener innan de jämförs genom snabb UTF8_BINARY
-teckenkollationering.
För språkmedvetna jämförelser använder Azure Databricks följande tekniker:
- International Components for Unicode (ICU)-bibliotek för beräkningssortering
- CLDR(Common Locale Data Repository) tabeller för specifik språkmedveten sortering.
- LDML (Unicode Locale Data Markup Language) för intern kodning av collationer.
Dessa tekniker kapslas in i en uppsättning namngivna sorteringar som kan användas i SQL-instruktioner.
Collationnamn
Eftersom det kan vara svårt att identifiera sorteringar utifrån deras LDML-specifikationer, har Azure Databricks en uppsättning mer lättanvända namngivna systemsorteringar.
Syntax
{ UTF8_BINARY |
UTF8_LCASE |
{ UNICODE | locale } [ _ modifier [...] ] }
locale
language_code [ _ script_code ] [ _ country_code ]
modifier
{ CS | CI | AS | AI }
UTF8_BINARY
En binär sortering med meta-nationella inställningar som jämför strängar byte med byte baserat på UTF-8 byte-representationen.
UTF8_BINARY
är standardsorteringen och den enklaste sorteringen för strängjämförelse i Azure Databricks.I den här sorteringen "A" (x'65') < "B" (x'66') < ... < "Z" (x'90').
Men 'Z' (x'90') < 'a' (x'97') och 'A' (x'65') <> 'a' (x'97').
Dessutom är tecken som "Ä" (x'C384') större än "Z" och "z" i den här sorteringen.
UTF8_LCASE
En lättvikts meta-locale skiftlägesokänslig sortering som jämför strängar utifrån deras UTF-8 byte-representation efter konvertering av strängarna till gemener.
UTF8_LCASE
är sorteringen som används för identifierare i Azure Databricks.Till exempel:
ORDER BY col COLLATE UTF8_LCASE
motsvarar
ORDER BY LOWER(col) COLLATE UTF8_BINARY
UNICODE
ICU-rotspråket.
Denna sortering, som i CLDR kallas "rotspråket" (LDML-specifikation: "und-u"), inför en språkagnostisk ordning som försöker vara intuitiv totalt sett. I en sådan sortering grupperas tecken som med tecken som. Till exempel: "a" < "A" < "Ä" < "b". "A" anses inte motsvara "a". Sorteringen är därför skiftlägeskänslig. "a" anses inte motsvara "ä". Sorteringen är därför accentkänslig.
nationella inställningar
En språkmedveten sortering baserat på CLDR-tabellerna.
Språkvarianten anges som en språkkod, en valfri skriptkod och en valfri landskod.
locale
är skiftlägesokänsligt.- language_code: En iso 639-1 språkkod med två bokstäver.
- script_code: En ISO 15924 skriptkod med fyra bokstäver.
- country_code: En tre-bokstavs ISO 3166-1 alfa-3 landskoden.
modifier
Anger sorteringsbeteendet för skiftlägeskänslighet och accentkänslighet.
- CS-: Skiftlägeskänslig. Standardbeteende.
- CI-: Skiftlägesokänslig.
- AS:: Accentkänslig. Det förvalda beteendet.
- AI: Accentsokänslig.
Du kan ange antingen
CS
ellerCI
och antingenAS
ellerAI
högst en gång och i valfri ordning. Själva modifierarna är skiftlägesokänsliga.
När du bearbetar en sortering normaliserar Azure Databricks sorteringsnamn genom att ta bort standardvärden.
Till exempel normaliseras SR_CYR_SRN_CS_AS
till SR
.
För en lista över sorteringar som stöds, se sorteringar som stöds.
Exempel
-- 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`
Standardsammanställning
Standardsortering gäller när du använder STRING
literaler, parametermarkörer, funktioner utan STRING
parametrar som producerar strängar och när du definierar kolumn-, fält- eller variabeltyper utan EN COLLATE-sats.
Standardsortering härleds från UTF8_BINARY
.
Sorteringsprioritet
För att bestämma vilken sortering som ska användas för en viss sträng definierar Azure Databricks regler för sorteringsprioritet.
Reglerna tilldelar 4 prioritetsnivåer till sorteringar:
uttrycklig
Sorteringen har uttryckligen tilldelats en sträng med hjälp av COLLATE-uttryck.
Exempel
-- 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
implicit
Sorteringen tilldelas implicit av kolumnen , fältet , kolumnaliaset , variabeln eller rutinparameterreferensen . Detta inkluderar resultatet av en underfråga så länge sorteringen inte är Ingen.
Exempel
-- 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', ',')
standard
En
STRING
-literal, namngiven eller namnlös -parametermarkör, eller enSTRING
som genereras av en funktion av en annan typ.Exempel
-- 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()
Den tilldelade sorteringen är Standardsortering.
Ingen
Ett
STRING
resultat av en funktion, operator eller set-operation (t.ex.UNION
) som tar mer än ettSTRING
argument som har olika implicita kollationer.Exempel
-- 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
Sorteringshärledning
När sorteringsordningen för ett STRING
-resultat härleds tillämpas företrädesreglerna på följande sätt:
Om uttrycket:
matchar definitionerna ovan
Sorteringen och prioriteten är som definierat.
är en funktion eller operator med en enda
STRING
parameter som returnerar enSTRING
Sorteringsordning och prioritetsordning är för parametern
STRING
.är en funktion eller operator med två eller flera
STRING
parametrarmed samma sortering och prioritet
Sortering och prioritet är de
STRING
parametrarnas.med olika sortering eller prioritet
Låt
C1
ochC2
vara distinkta sorteringar och låtD
vara standardsortering. Prioriteten och sorteringen bestäms av följande tabell:Sortering och prioritet C1 Explicit C1 Implicit D Förval Ingen C2 Explicit Fel C2 Explicit C2 Explicit C2 Explicit C2 Implicit Explicit C1 Ingen C2 Implicit Ingen D Standard C1 Explicit C1 Implicit D Förval Ingen Ingen C1 Explicit Ingen Ingen Ingen
Exempel
> 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;
UTF8_BINARY
-- 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
Besläktad
- kollationera uttryck
- sorteringsfunktion
- tabellfunktionen sortering