Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Databricks SQL
Databricks Runtime 16.1 lub nowszej
Sortowanie to zestaw reguł określający sposób wykonywania porównań ciągów. Korelacje są używane do porównywania ciągów w sposób niewrażliwy na wielkość liter, niewrażliwy na akcent lub niewrażliwy na końcowe spacje albo do sortowania ciągów w określonej kolejności uwzględniającej język.
Ciągi w usłudze Azure Databricks są reprezentowane jako znaki Unicode zakodowane w formacie UTF-8.
Domyślnie usługa Azure Databricks porównuje ciągi według ich binarnej reprezentacji UTF8. Jest to nazywane sortowaniem UTF8_BINARY.
UTF8_BINARY porównania są szybkie i odpowiednie w wielu przypadkach, ale mogą nie być właściwe dla wszystkich aplikacji, zwłaszcza tych, które wymagają sortowania lub porównań uwzględniających różnice językowe.
Oprócz porównań uwzględniających język, częstym przypadkiem użycia jest wymuszanie ignorowania wielkości liter.
Usługa Azure Databricks ma sortowanie UTF8_LCASE specjalnie dla tego celu.
Konwertuje ciągi na małe litery przed porównaniem ich przy użyciu szybkiego sortowania UTF8_BINARY.
W przypadku porównań obsługujących język usługa Azure Databricks wykorzystuje następujące technologie:
- Biblioteka International Components for Unicode (ICU) do obliczania porządkowania tekstu
- Typowe tabele z Repozytorium Danych Ustawień Regionalnych (CLDR) dla specyficznego sortowania uwzględniającego ustawienia regionalne.
- Język LDML (Unicode Locale Data Markup Language) do wewnętrznego kodowania porządkowań.
Te technologie są zawarte w zestawie nazwanych porządkowań, które mogą być używane w instrukcjach SQL.
Nazwy sortowania
Ponieważ identyfikowanie sortowań według ich specyfikacji LDML może być złożone i trudne do odczytania, usługa Azure Databricks oferuje zestaw łatwiejszych w użyciu nazwanych sortowań systemowych.
Składnia
{ UTF8_BINARY |
UTF8_LCASE |
{ UNICODE | locale } [ _ modifier [...] ] }
locale
language_code [ _ script_code ] [ _ country_code ]
modifier
{ CS | CI | AS | AI | RTRIM }
UTF8_BINARY
Sortowanie binarne meta-locale, które porównuje ciągi znaków bajt po bajcie na podstawie reprezentacji bajtów UTF-8.
UTF8_BINARYjest domyślnym i najbardziej uproszczonym sortowaniem dla porównania ciągów w usłudze Azure Databricks.W tym sortowaniu "A" (x'65') < "B" (x'66') < ... < "Z" (x'90').
Jednak "Z" (x'90') < 'a' (x'97'), i "A" (x'65') < 'a' (x'97').
Ponadto znaki takie jak "Ä" (x'C384') są większe niż "Z" i "z" w tym sortowaniu.
UTF8_LCASE
Uproszczone sortowanie bez uwzględniania wielkości liter metadanych, które porównuje ciągi przy użyciu ich reprezentacji bajtów UTF-8 po przekonwertowaniu ciągów na małe litery.
UTF8_LCASEto sortowanie używane dla identyfikatorów w usłudze Azure Databricks.Na przykład:
ORDER BY col COLLATE UTF8_LCASEjest odpowiednikiem
ORDER BY LOWER(col) COLLATE UTF8_BINARYUNICODE
Ustawienia regionalne główne ICU.
To sortowanie, znane w CLDR jako wersja regionalna "root" (specyfikacja LDML: "und-u"), nakłada kolejność nieuzależnioną od języka, która stara się być ogólnie intuicyjna. W tym zestawieniu grupowane są podobne znaki. Na przykład: "a" "A" << "Ä" < "b". Wartość "A" nie jest uważana za równoważną wartości "a". W związku z tym sortowanie uwzględnia wielkość liter. "a" nie jest uważane za równoważne "ä". W związku z tym sortowanie jest wrażliwe na akcent.
Region
Sortowanie uwzględniające ustawienia regionalne, oparte na tabelach CLDR.
Ustawienia regionalne są określane jako kod języka, opcjonalny kod skryptu i opcjonalny kod kraju.
localejest nieczuły na wielkość liter.- language_code: dwuliterowy kod języka ISO 639-1 .
- script_code: czteroliterowy kod skryptu ISO 15924 .
- country_code: trzyliterowy kod kraju ISO 3166-1 alfa-3 .
Modyfikator
Określa zachowanie sortowania pod względem czułości na wielkość liter i czułości na akcenty.
- CS: Uwzględniana wielkość liter. Domyślne zachowanie.
- CI: Bez uwzględniania wielkości liter.
- AS: Wrażliwy na akcent. Domyślne zachowanie.
- Sztuczna inteligencja: bez uwzględniania akcentów.
Dotyczy:
Databricks SQL
Databricks Runtime 16.2 lub nowszych- RTRIM: Niewrażliwe na spacje końcowe. Usuwa spacje na końcu ('u0020') przed porównaniem.
Dotyczy:
Databricks SQL
Databricks Runtime 16.2 lub nowszeMożna określić
RTRIM,CSlubCI, orazASlubAIco najwyżej raz i w dowolnej kolejności. Te modyfikatory są niezależne od wielkości liter.
Podczas przetwarzania sortowania usługa Azure Databricks normalizuje nazwy sortowania, usuwając wartości domyślne.
Na przykład SR_CYR_SRN_CS_AS jest znormalizowana do SR.
Aby uzyskać listę obsługiwanych sortowania, zobacz Obsługiwane sortowania.
Przykłady
-- 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`
Sortowanie domyślne
Sortowanie domyślne ma zastosowanie w przypadku używania literałów STRING, znaczników parametrów, funkcji bez STRING parametrów tworzących ciągi oraz podczas definiowania typów kolumn, pól lub zmiennych bez klauzuli COLLATE.
Sortowanie domyślne jest określone na jeden z następujących sposobów:
W przypadku instrukcji DDL, takich jak
ALTER TABLE,CREATE VIEW,CREATE TABLEiCREATE FUNCTION:- Sortowanie domyślne to domyślne sortowanie tworzonego lub zmienianego obiektu.
- Jeśli nie określono klauzuli
DEFAULT COLLATION, sortowanie domyślne toUTF8_BINARY.
W przypadku języka DML (UPDATE, DELETE, INSERT, MERGE) i instrukcji zapytania domyślnym sortowaniem jest
UTF8_BINARY.
Pierwszeństwo sortowania
Aby zdecydować, które sortowanie ma być używane dla danego ciągu, usługa Azure Databricks definiuje reguły pierwszeństwa sortowania.
Reguły przypisują 4 poziomy pierwszeństwa do sortowania:
Wyraźny
Sortowanie zostało jawnie przypisane do ciągu przy użyciu wyrażenia COLLATE.
Przykłady
-- 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 DENiejawny
Sortowanie jest niejawnie przypisywane przez kolumnę
, pole , alias kolumny , zmienną lub odwołanie do parametru procedury . Obejmuje to wynik podzapytania, o ile sortowanie nie jest None. Przykłady
-- 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', ',')Domyślny
STRINGLiterał, nazwany lub nienazwany znacznik parametru lubSTRINGwygenerowany przez funkcję z innego typu.Przykłady
-- 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()Żaden
STRINGWynik funkcji, operatora lub operacji zestawu (np.UNION), która przyjmuje więcej niż jedenSTRINGargument o różnych niejawnych sortowaniach.Przykłady
-- 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
Tworzenie zasad sortowania
Podczas wyprowadzania sortowania dla wyniku STRING reguły pierwszeństwa sortowania są stosowane w następujący sposób:
Jeśli wyrażenie:
pasuje do powyższych definicji
Sortowanie i pierwszeństwo są zdefiniowane.
jest funkcją lub operatorem z pojedynczym parametrem
STRING, zwracającSTRINGPorządek sortowania i priorytety są określone przez parametr
STRING.jest funkcją lub operatorem z co najmniej dwoma parametrami
STRINGz tym samym sortowaniem i kolejnością
Sortowanie i precedencja odpowiadają parametrom
STRING.z różnymi porządkowaniami lub priorytetem
Niech
C1iC2być odrębnymi sortowaniami, aDbyć sortowaniem domyślnym. Pierwszeństwo i sortowanie są określane przez następującą tabelę:Kolejność i priorytet C1 Jawne C1 Niejawny D domyślne Żaden C2 Wyraźne Błąd C2 Jawne C2 Jawne C2 Jawne C2 Niejawne Jawne C1 Żaden C2 Niejawne Żaden D Domyślne C1 Jawne C1 Niejawny D domyślne Żaden Żaden C1 Jawne Żaden Żaden Żaden
Przykłady
> 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