Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 rendezések támogatják a kis- és nagybetűk megkülönböztetését, az ékezetes érzéketleneket és a záró szóközök érzéketlen összehasonlítását, valamint a nyelvérzékeny sztringek sorrendjét.
A Azure Databricks sztringjei UTF-8 kódolt Kódkarakterek. Alapértelmezés szerint a Azure Databricks a sztringeket a bináris UTF-8-ábrázolásukkal hasonlítja össze, más néven UTF8_BINARY rendezéssel.
UTF8_BINARY az összehasonlítások sok esetben gyorsak és megfelelőek, de nem feltétlenül alkalmasak olyan alkalmazásokhoz, amelyek nyelvtudatos rendezést vagy összehasonlítást igényelnek.
A bináris összehasonlításokon túl gyakori használati eset a kis- és nagybetűk megkülönböztetése. A UTF8_LCASE rendezés erre a célra készült. A sztringeket kisbetűssé alakítja, mielőtt összehasonlítja őket.UTF8_BINARY
Nyelvtudatos összehasonlítások esetén Azure Databricks a következő technológiákat használja:
- A Unicode (ICU) kódtár nemzetközi összetevői a rendezés kiszámításához.
- Common Locale Data Repository (CLDR) táblák a területi beállításokkal kapcsolatos 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
Azure Databricks elnevezett rendszerelrendezéseket biztosít az azonosítás egyszerűsítése érdekében. Az LDML-specifikációk bonyolultak lehetnek közvetlenül olvashatók és használhatók.
Szintaxis
{ UTF8_BINARY |
UTF8_LCASE |
{ UNICODE | locale } [ _ modifier [...] ] }
locale
language_code [ _ script_code ] [ _ country_code ]
modifier
{ CS | CI | AS | AI | RTRIM }
UTF8_BINARYBináris rendezés, amely az UTF-8-ábrázolásuk alapján hasonlítja össze a sztringek bájtonkénti értékét.
UTF8_BINARYa Azure Databricks alapértelmezett és legkönnyűbb rendezése.Ebben a rendezésben:
'A'(x'65') <'B'(x'66') < ... <'Z'(x'90'). Azonban'Z'(x'90')<'a'(x'97'), és'A'(x'65') <>'a'(x'97'). Az olyan karakterek, mint az'Ä'(x'C384') nagyobbak, mint mindkettő'Z'és'z'.UTF8_LCASEEgy kis- és nagybetűket nem érzékelyítő rendezés, amely a sztringeket kisbetűssé alakítja, mielőtt összehasonlítja őket.
UTF8_BINARYUTF8_LCASEa Azure Databricks Identifiers esetén használt rendezés.Például:
ORDER BY col COLLATE UTF8_LCASEegyenértékű a következővel:
ORDER BY LOWER(col) COLLATE UTF8_BINARYUNICODEAz ICU gyökér területi beállítása, amely a CLDR-ben területi beállításként
rootismert (LDML-specifikáció:und-u). Ez a rendezés olyan nyelvi-agnosztikus sorrendet alkalmaz, amely a hasonló karaktereket csoportosítja. Például:'a'<'A'<'Ä'<'b'. Ez a rendezés alapértelmezés szerint megkülönbözteti a kis- és nagybetűk megkülönböztetettségét.localeTerületi beállításokkal rendelkező rendezés CLDR-táblák alapján. 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. A területi értékek nem érzékenyek a kis- és nagybetűkre.
-
language_code: Kétbetűs ISO 639-1 nyelvi kód. -
script_code: Egy négybetűs ISO 15924 szkriptkód. -
country_code: Egy hárombetűs ISO 3166-1 alfa-3 országkód.
-
modifierSzabályozza a kis- és nagybetűk érzékenységét, az ékezetes érzékenységet és a záró tér viselkedését. A módosítók nem érzékenyek a kis- és nagybetűkre, és bármilyen sorrendben megadhatók.
-
CS: Kis- és nagybetűk megkülönböztetése. Az alapértelmezett viselkedés. -
CI: Kis- és nagybetűk érzéketlenek. -
AS: Jelölőszín-érzékeny. Az alapértelmezett viselkedés. -
AI: Ékezetes érzéketlen.
A következőre vonatkozik:
Databricks SQL
Databricks Runtime 16.2 és újabb-
RTRIM: Záró-tér é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 újabbLegfeljebb az egyiket
RTRIMCS, vagy legfeljebb az egyiketCIASmegadhatjaAI.-
Ha Azure Databricks feldolgoz egy rendezési nevet, az alapértelmezések eltávolításával normalizálja a nevet. Például SR_CYR_SRN_CS_AS normalizálja a következőt SR: .
A támogatott rendezések listáját a Támogatott rendezések című témakörben találja.
Példák
-- Fully qualified collation names are supported; case doesn't matter.
system.builtin.unicode
-- All collations are system-defined and do not require qualification.
unicode
-- Two-letter language code for German collation.
DE
-- Two-letter language code and three-letter country code for French Canadian collation.
fr_CAN
-- Two-letter language code, four-letter script code, and three-letter country code
-- for Traditional Chinese in Macao.
zh_Hant_MAC
-- German collation with case-insensitive and accent-insensitive modifiers.
-- 'Ä', 'A', and 'a' are all considered equal.
de_CI_AI
-- Backticks are allowed but not required for built-in collations.
`UTF8_BINARY`
Összehasonlítása UTF8_LCASE és UNICODE-rendezések
Mind UTF8_LCASE a UNICODE-alapú rendezések, például UNICODE_CI a kis- és UNICODE_CI_AI nagybetűk érzéketlen összehasonlítását támogatják, de eltérőek az ékezetes karakterek és a területi szabályok kezelésének módjában.
Viselkedésbeli különbségek
UTF8_LCASE a sztringeket kisbetűssé alakítja, és összehasonlítja őket bájtonként a használatával UTF8_BINARY. Könnyű és gyors, de az ékezetes karaktereket a nem szagolatlan formáktól eltérően kezeli.
A UNICODE-alapú rendezések az ICU-kódtárat és a CLDR területi adatokat használják. A CI módosítók kiterjesztik AI ezt a lehetőséget, hogy a karaktereket egyenértékűként kezeljék akkor is, ha eltérnek a kis- és nagybetűktől, az ékezetestől vagy mindkettőtől. Ezek a rendezések alaposabbak, de nagyobb számítási költséggel rendelkeznek.
| Magatartás | UTF8_LCASE |
UNICODE_CI |
UNICODE_CI_AI |
|---|---|---|---|
'A' = 'a' |
true |
true |
true |
'Café' = 'café' |
true |
true |
true |
'Cafe' = 'Café' |
false |
false |
true |
'ß' = 'ss' (német éles) |
false |
false |
false |
'resume' = 'résumé' |
false |
false |
true |
Támogatja LIKE és RLIKE |
Igen | No | No |
| Támogatja a területi beállításokra vonatkozó szabályokat | No | Igen | Igen |
Mikor érdemes használni az egyes rendezéseket?
Gyors kis- és nagybetűk érzéketlen összehasonlítására használható
UTF8_LCASE, ha a jelölő karaktereknek eltérőnek kell lenniük. Ez a rendezés kiválóan alkalmas az adattárházak egyszerű kis- és nagybetűk közötti sztringegyeztetést használó rendszerekből történő migrálására.Unicode-szabályokat követő kis- és nagybetűs összehasonlításokhoz használható
UNICODE_CI, különösen akkor, ha az adatok több nyelvből származó karaktereket tartalmaznak, ahol az egyszerű alsóbbrendűség nem elegendő.Akkor használható
UNICODE_CI_AI, ha a kis- és a nagybetűk közötti különbségeket figyelmen kívül kell hagyni. Ha például egy keresésnek"resume"egyeznie"résumé"kell. Ez gyakori a felhasználó által használt keresésekben és többnyelvű alkalmazásokban.
Példák
-- UTF8_LCASE lowercases then compares bytes.
-- Accented and unaccented characters are not equivalent.
> SELECT 'Cafe' = 'café' COLLATE UTF8_LCASE;
false
> SELECT 'Café' = 'café' COLLATE UTF8_LCASE;
true
-- UNICODE_CI is case-insensitive but accent-sensitive.
-- 'Café' equals 'café' (case differs) but not 'Cafe' (accent differs).
> SELECT 'Café' = 'cafe' COLLATE UNICODE_CI;
false
> SELECT 'Café' = 'café' COLLATE UNICODE_CI;
true
-- UNICODE_CI_AI is case-insensitive and accent-insensitive.
-- 'Café' matches 'cafe' because both case and accent differences are ignored.
> SELECT 'Cafe' = 'café' COLLATE UNICODE_CI_AI;
true
> SELECT 'resume' = 'résumé' COLLATE UNICODE_CI_AI;
true
-- UTF8_LCASE sorts by lowercase byte order.
-- UNICODE collations sort by linguistic similarity.
> SELECT col FROM VALUES('Banana'), ('apple'), ('Ångström'), ('äpfel') AS t(col)
ORDER BY col COLLATE UTF8_LCASE;
apple
Banana
Ångström
äpfel
> SELECT col FROM VALUES('Banana'), ('apple'), ('Ångström'), ('äpfel') AS t(col)
ORDER BY col COLLATE UNICODE_CI;
apple
Ångström
äpfel
Banana
Alapértelmezett koláció
Az alapértelmezett rendezés a konstansokra, paraméterjelölőkre STRING , sztringeket előállító paraméterek nélküli STRING függvényekre, valamint oszlop-, mező- vagy változótípus-definíciókra vonatkozik záradék nélkül COLLATE .
Az alapértelmezett rendezés a következőképpen 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-utasítások (
UPDATE, ,DELETE FROM,INSERTMERGE INTO) és lekérdezések esetében az alapértelmezett rendezés azUTF8_BINARY.
Rendezés elsőbbsége
Azure Databricks rendezési elsőbbséget biztosító szabályokat alkalmaz annak meghatározására, hogy egy adott sztringhez melyik rendezést kell használni. Négy elsőbbségi szint van meghatározva:
Kifejezett
A rendezés explicit módon van hozzárendelve kifejezéssel
collate.-- Force 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 oszlopnév, mezőnév, oszlop aliasa, változónév vagy paraméternév-hivatkozás rendeli hozzá, beleértve egy olyan alquery eredményét is, amelyben a rendezés nem Nincs.
-- Use the collation of the column as defined. employee.name LIKE 'Mc%' -- Use the collation of the variable as 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.-- A literal string has the default collation. 'Hello' -- :parm1 is a parameter marker using the session default collation. EXECUTE IMMEDIATE 'SELECT :parm1' USING 'Hello' AS parm1; -- ? is a parameter marker using the session default collation. EXECUTE IMMEDIATE 'SELECT ?' USING 'Hello'; -- The result of casting a non-STRING to STRING uses 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') -- session_user() returns a STRING with 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 eredménye, amelyUNIONegynélSTRINGtöbb argumentumot vesz igénybe különböző implicit rendezésekkel.-- 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 explicit collations results in no collation. SELECT 'Voulez vous ' COLLATE FR UNION ALL SELECT 'Kartoffelsupp...' COLLATE DE
Rendezés származtatása
Az eredmény rendezésekor STRING az alábbi sorrendi szabályok érvényesek:
Ha a kifejezés megfelel a fenti definíciók egyikének, a rendezés és az elsőbbség a megadott módon történik.
Ha a kifejezés egy függvény vagy operátor, amelynek egyetlen
STRINGparamétere ad vissza egySTRINGértéket, akkor a rendezés és az elsőbbség aSTRINGparaméteré.Ha a kifejezés egy függvény vagy operátor két vagy több
STRINGparaméterrel:Ha minden paraméter ugyanazzal a rendezéssel és előzményekkel rendelkezik, az eredmény ezt a rendezést és elsőbbséget használja.
Ha a paraméterek eltérő rendezésekkel vagy előzményekkel rendelkeznek, legyen
C1C2és legyen különböző rendezés, ésDlegyen az alapértelmezett rendezés. Az eredményt 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 Kifejezett | 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
-- A function that modifies 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 German collides with implicit French; the result has 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
-- Explicit collation wins over no collation.
> SELECT collation('Ciao' COLLATE IT || (fr || de)) FROM words;
IT
-- Implicit collation (English) does not win over None.
> SELECT collation(en || (fr || de)) FROM words;
null
-- Explicit collation (English) wins over implicit collation anywhere in the expression.
> SELECT collation((fr || ltrim('H' COLLATE EN, fr)) || fr) FROM words;
EN
Korlátozások
Számos mintaegyeztető és regex függvény támogatja a csak UTF8_BINARY és UTF8_LCASE a rendezéseket. Azure Databricks hibát jelez, ha ezeket a függvényeket más rendezésekkel használják, például UNICODE vagy területi beállításokra vonatkozó rendezésekkel, például DE vagy FR_CI_AI.
Az érintett függvények közé tartozik LIKEa , ILIKE, RLIKEés a regexp_* függvénycsalád. Ha az oszlopokon más rendezésekkel egyező sztringeket használ, használja contains a függvényt, startswith a függvényt vagy endswith a függvényt.