Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:
Databricks SQL
Databricks Runtime 16.1 ve üzeri
Harmanlama, dize karşılaştırmalarının nasıl gerçekleştirileceğini belirleyen bir dizi kuraldır. Harmanlamalar büyük/küçük harfe duyarlı olmayan, aksan duyarsız ve sondaki alana duyarlı olmayan karşılaştırmaların yanı sıra dil kullanan dize sıralamasını destekler.
Azure Databricks dizeleri UTF-8 kodlanmış Unicode karakterleri olarak temsil edilir. Varsayılan olarak, Azure Databricks dizeleri UTF8_BINARY harmanlaması olarak bilinen ikili UTF-8 gösterimleriyle karşılaştırır.
UTF8_BINARY karşılaştırmalar çoğu durumda hızlı ve uygundur, ancak dil kullanan sıralama veya karşılaştırma gerektiren uygulamalar için uygun olmayabilir.
İkili karşılaştırmaların ötesinde yaygın bir kullanım örneği büyük/küçük harfe duyarsız eşleştirmedir. Harmanlama UTF8_LCASE bu amaç için tasarlanmıştır. kullanarak UTF8_BINARYkarşılaştırmadan önce dizeleri küçük harfe dönüştürür.
Dil kullanan karşılaştırmalar için Azure Databricks aşağıdaki teknolojileri kullanır:
- Harmanlamayı hesaplamak için Unicode (ICU) kitaplığı için Uluslararası Bileşenler.
- Yerel ayar kullanan harmanlama için ortak Yerel Ayar Veri Deposu (CLDR) tabloları.
- Unicode Yerel Ayar Veri Biçimlendirme Dili (LDML) harmanlamaları dahili olarak kodlar.
Bu teknolojiler, SQL deyimlerinde kullanılabilen bir dizi adlandırılmış harmanlama içinde kapsüllenir.
Uyarı
Delta Lake tablolarıyla harmanlamalar kullanırken sınırlamalar için bkz. Sınırlamalar.
Sıralama adları
Azure Databricks tanımlamayı basitleştirmek için adlandırılmış sistem harmanlamaları sağlar. LDML belirtimlerinin doğrudan okunup kullanılması karmaşık olabilir.
Sözdizimi
{ UTF8_BINARY |
UTF8_LCASE |
{ UNICODE | locale } [ _ modifier [...] ] }
locale
language_code [ _ script_code ] [ _ country_code ]
modifier
{ CS | CI | AS | AI | RTRIM }
UTF8_BINARYDIZEleri UTF-8 gösterimine göre bayt bayt karşılaştıran ikili harmanlama.
UTF8_BINARY, Azure Databricks varsayılan ve en basit harmanlamadır.Bu harmanlamada:
'A'(x'65') <'B'(x'66') < ... <'Z'(x'90'). Ancak,'Z'(x'90') <'a'(x'97') ve'A'(x'65') <>'a'(x'97'). (x'C384') gibi'Ä'karakterler hem hem'Z'de'z'değerinden büyüktür.UTF8_LCASEkullanarak
UTF8_BINARYkarşılaştırmadan önce dizeleri küçük harfe dönüştüren basit, büyük/küçük harfe duyarlı olmayan harmanlama.UTF8_LCASEIdentifiers Azure Databricks için kullanılan harmanlamadır.Örneğin:
ORDER BY col COLLATE UTF8_LCASEeşdeğerdir:
ORDER BY LOWER(col) COLLATE UTF8_BINARYUNICODECLDR'de yerel ayar olarak
rootbilinen ICU kök yerel ayarı (LDML belirtimi:und-u). Bu harmanlama, benzer karakterleri birlikte gruplandıran dilden bağımsız bir sıra uygular. Örneğin:'a'<'A'<'Ä'<'b'. Bu harmanlama, varsayılan olarak büyük/küçük harfe ve vurguya duyarlıdır.localeCLDR tablolarını temel alan yerel ayar kullanan harmanlama. Yerel ayar bir dil kodu, isteğe bağlı bir betik kodu ve isteğe bağlı bir ülke kodu olarak belirtilir. Yerel ayar değerleri büyük/küçük harfe duyarlı değildir.
-
language_code: İki harfli ISO 639-1 dil kodu. -
script_code: Dört harfli ISO 15924 betik kodu. -
country_code: Üç harfli ISO 3166-1 alfa-3 ülke kodu.
-
modifierBüyük/küçük harf duyarlılığını, vurgu duyarlılığını ve sondaki alan davranışını denetler. Değiştiriciler büyük/küçük harfe duyarlı değildir ve herhangi bir sırada belirtilebilir.
-
CS:Duyarlı. Varsayılan davranış. -
CI:Duyarlı. -
AS: Vurguya duyarlı. Varsayılan davranış. -
AI: Vurguya duyarsız.
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 16.2 ve üzeri-
RTRIM: Sondaki boşluk duyarsız. Karşılaştırmadan önce sondaki boşlukları (u0020) kırpılır.
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 16.2 ve üzeri, en çok veya
RTRIMveyaCSve en fazla birCIveyaASbelirtebilirsinizAI.-
Azure Databricks harmanlama adını işlediğinde, varsayılan değerleri kaldırarak adı normalleştirir. Örneğin, SR_CYR_SRN_CS_AS olarak normalleştirir SR.
Desteklenen harmanlamaların listesi için bkz. desteklenen harmanlamalar
Örnekler
-- 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`
Karşılaştırma UTF8_LCASE ve UNICODE harmanlamaları
ve gibi UTF8_LCASEUNICODE_CI hem hem de UNICODE_CI_AI UNICODE tabanlı harmanlamalar büyük/küçük harfe duyarsız karşılaştırmaları destekler, ancak aksanlı karakterleri ve yerel ayara özgü kuralları işleme yöntemlerinde farklılık gösterir.
Davranış farklılıkları
UTF8_LCASE dizeleri küçük harfe dönüştürür ve kullanarak UTF8_BINARYbayt bayt karşılaştırır. Basit ve hızlıdır, ancak aksanlı karakterlere, fark edilmeyen biçimlerinden farklı davranır.
UNICODE tabanlı harmanlamalar ICU kitaplığını ve CLDR yerel ayar verilerini kullanır.
CI ve AI değiştiricileri, büyük/küçük harf, vurgu veya her ikisinde farklı olsalar bile karakterleri eşdeğer olarak ele almak için bunu genişletir. Bu harmanlamalar daha kapsamlıdır ancak hesaplama maliyeti daha yüksektir.
| Davranış | UTF8_LCASE |
UNICODE_CI |
UNICODE_CI_AI |
|---|---|---|---|
'A' = 'a' |
true |
true |
true |
'Café' = 'café' |
true |
true |
true |
'Cafe' = 'Café' |
false |
false |
true |
'ß' = 'ss' (Almanca keskin s) |
false |
false |
false |
'resume' = 'résumé' |
false |
false |
true |
LIKE ve RLIKE destekler |
Evet | Hayır | Hayır |
| Yerel ayara özgü kuralları destekler | Hayır | Evet | Evet |
Her harmanlama ne zaman kullanılır?
Aksanlı karakterlerin farklı kalması gerektiğinde hızlı büyük/küçük harfe duyarlı olmayan karşılaştırmalar için kullanın
UTF8_LCASE. Bu harmanlama, basit büyük/küçük harfe duyarlı olmayan dize eşleştirme kullanan sistemlerden veri ambarı geçişleri için uygundur.Özellikle veriler basit küçük harflerin yetersiz olduğu birden çok dilden karakterler içerdiğinde Unicode kurallarına uyan büyük/küçük harfe duyarlı olmayan karşılaştırmalar için kullanın
UNICODE_CI.Hem büyük/küçük harf hem de vurgu farklılıkları yoksayıldığında kullanın
UNICODE_CI_AI. Örneğin, araması"resume"ile eşleşmesi"résumé"gerekiyorsa. Bu, kullanıcıya yönelik arama ve çok dilli uygulamalarda yaygındır.
Örnekler
-- 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
Varsayılan harmanlama
Varsayılan harmanlama değişmez değerler, parametre işaretçileri, dize üreten parametreler içermeyen işlevler ve yan STRING tümcesi olmayan STRING sütun, alan veya değişken türü tanımları için geçerlidirCOLLATE.
Varsayılan harmanlama aşağıdaki gibi türetilir:
ALTER TABLE,CREATE VIEW,CREATE TABLEveCREATE FUNCTIONgibi DDL deyimleri için:- Varsayılan harmanlama, oluşturulan veya değiştirilen nesnenin varsayılan harmanlamasıdır.
-
DEFAULT COLLATIONyan tümcesi belirtilmezse, varsayılan harmanlamaUTF8_BINARYolarak kabul edilir.
DML deyimleri (
UPDATE,DELETE FROM,INSERT,MERGE INTO) ve Query için varsayılan harmanlama olurUTF8_BINARY.
Harmanlama önceliği
Azure Databricks, belirli bir dize için hangi harmanlamanın kullanılacağını belirlemek için harmanlama önceliği kurallarını uygular. Dört öncelik düzeyi tanımlanır:
Belirgin
Harmanlama açıkça ifade kullanılarak
collateatanır.-- 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 DEÖrtük
Harmanlama örtük olarak sütun adı, Alan adı, Sütun diğer adı, Değişken adı veya Parametre adı başvurusu tarafından atanır; harmanlamanın Hiçbiri olmadığı bir alt sorgunun sonucu da buna dahildir.
-- Use the collation of the column as defined. employee.name LIKE 'Mc%' -- Use the collation of the variable as defined. translate(session.tempvar, 'Z', ',')Varsayılan
Değişmez
STRINGdeğer, adlandırılmış veya adlandırılmamış Parametre işaretçileri veya başka birSTRINGtürden bir işlev tarafından üretilen.-- 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()Atanan harmanlama varsayılan harmanlamadır.
Yok
STRINGFarklı örtük harmanlamalara sahip birdenUNIONfazla bağımsız değişken alan gibiSTRINGbir işlev, işleç veya ayarlama işleminin sonucu.-- 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
Sıralama türetme
Bir STRING sonuç için harmanlama türetilirken öncelik kuralları aşağıdaki gibi uygulanır:
İfade yukarıdaki tanımlardan biriyle eşleşiyorsa, harmanlama ve öncelik tanımlandığı gibi olur.
İfade, tek
STRINGbir parametre döndüren birSTRINGişlev veya işleçse, harmanlama ve öncelik, parametresininSTRINGdeğerleridir.İfade iki veya daha fazla
STRINGparametreye sahip bir işlev veya işleçse:Tüm parametreler aynı harmanlama ve önceliğe sahipse, sonuç bu harmanlamayı ve önceliği kullanır.
Parametreler farklı harmanlamalara veya önceliğe sahipse,
C1C2ayrı harmanlamalarDve varsayılan harmanlama olsun. Sonuç aşağıdaki tablo tarafından belirlenir:
| Harmanlama ve Öncelik | C1 Belirgin | C1 Gizli | D Varsayılan | Hiç kimse |
|---|---|---|---|---|
| C2 Belirgin | Hata | C2 Belirgin | C2 Belirgin | C2 Belirgin |
| C2 Örtük | Açık C1 | Hiç kimse | C2 Örtük | Hiç kimse |
| D Varsayılan | C1 Belirgin | C1 Gizli | D Varsayılan | Hiç kimse |
| Hiç kimse | C1 Belirgin | Hiç kimse | Hiç kimse | Hiç kimse |
Örnekler
> 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
Sınırlamalar
Birçok desen eşleştirme ve regex işlevi yalnızca UTF8_BINARY ve UTF8_LCASE harmanlamaları destekler. Azure Databricks, bu işlevler UNICODE gibi diğer harmanlamalarla veya DE veya FR_CI_AI gibi yerel ayara özgü harmanlamalarla kullanıldığında bir hata oluşturur.
Etkilenen işlevler , , LIKEILIKEve RLIKE işlev ailesini içerirregexp_*. Diğer harmanlamalarla sütunlarda dize eşleştirme için işlev, contains işlev veya startswith işlev kullanınendswith.