Udostępnij za pośrednictwem


Zestawianie

Ważny

Ta funkcja jest dostępna w Publicznej Wersji Zapoznawczej .

Dotyczy:,, które są oznaczone jako obowiązujące,oraz, Databricks Runtime 16.1 i nowsze

Sortowanie to zestaw reguł określający sposób wykonywania porównań ciągów. Sortowania są używane do porównywania ciągów w sposób niewrażliwy na wielkość liter lub bez uwzględniania akcentu lub sortowania ciągów w określonej kolejności rozpoznawania języka.

Ciągi w usłudze Azure Databricks są reprezentowane jako znaki UTF-8 zakodowane unicode. 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ń obsługujących język, typowym przypadkiem użycia jest wymaganie porównań bez uwzględniania 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:

Te technologie są zawarte w zestawie nazwanych porządków, 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 nazwanych systemowych sortowań, które są łatwiejsze w użyciu.

Składnia

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

locale
  language_code [ _ script_code ] [ _ country_code ]

modifier
  { CS | CI | AS | AI }
  • 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_BINARY jest domyślnym i najbardziej uproszczonym sortowaniem dla porównania ciągów w usłudze Azure Databricks.

    W tym zestawieniu '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_LCASE to zestawienie używane do identyfikatorów w usłudze Azure Databricks.

    Na przykład:

    ORDER BY col COLLATE UTF8_LCASE
    

    jest odpowiednikiem

    ORDER BY LOWER(col) COLLATE UTF8_BINARY
    
  • UNICODE

    Ustawienia regionalne główne ICU.

    To sortowanie, określane w CLDR jako lokalizacja "root" (specyfikacja LDML: "und-u"), nakłada porządek niezależny od języka, który ogólnie stara się być intuicyjny. W tej kolacji znaki takie jak i są grupowane. Na przykład: "a" < "A" < "Ä" < "b". "A" nie jest uważane za równoważne "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.

  • ustawień regionalnych

    Sortowanie obsługujące ustawienia regionalne oparte na tabelach CLDR.

    Ustawienia regionalne są określane jako kod języka, opcjonalny kod skryptu i opcjonalny kod kraju. locale jest nieczuły na wielkość liter.

  • 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ągłej integracji: bez uwzględniania wielkości liter.
    • AS: wrażliwy na akcent. Domyślne zachowanie.
    • Sztuczna inteligencja: niewrażliwa na akcenty.

    Można określić CS lub CIoraz AS lub AI co 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 podczas 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 w 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:

  1. jawne

    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 DE
    
  2. niejawna

    Porządkowanie jest niejawnie przypisywane przez kolumnę , pole , alias kolumny , zmienną lub przez odwołanie parametru rutynowego . Obejmuje to wynik podzapytania, pod warunkiem że porządek sortowania 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', ',')
    
  3. domyślny

    Literał STRING, znacznik parametru nazwany lub nieznany, lub STRING wygenerowany przez funkcję 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()
    

    Przypisane sortowanie to domyślne sortowanie .

  4. Brak

    Wynik STRING funkcji, operatora lub operacji zestawu (np. UNION), która przyjmuje więcej niż jeden argument STRING, który ma różne niejawne sortowania.

    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:

  1. pasuje do powyższych definicji

    Sortowanie i pierwszeństwo są zdefiniowane.

  2. jest funkcją lub operatorem z pojedynczym parametrem STRING, zwracając STRING

    Porządek sortowania i priorytety są określone przez parametr STRING.

  3. jest funkcją lub operatorem z co najmniej dwoma parametrami STRING

    1. z tym samym sortowaniem i kolejnością

      Układ i pierwszeństwo odpowiadają parametrom STRING.

    2. z różnymi porządkowaniami lub priorytetem

      Niech C1 i C2 być odrębnymi sortowaniami, a D być 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 Jawne Błąd C2 Jawne C2 Wprost C2 Jawne
      C2 Niejawne Jawne C1 Żaden C2 Niejawne Żaden
      D domyślna C1 Jawne C1 Ukryty D Domyślne Żaden
      Brak C1 Jawne Żaden Żaden Żaden

Przykłady

> 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