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.
Önemli
Bu özellik Genel Önizlemesürümündedir.
Ş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, dizeleri büyük/küçük harfe, vurgulara veya sondaki boşluklara duyarsız bir şekilde karşılaştırmak veya dizeleri belirli bir dile duyarlı bir sırayla sıralamak için kullanılır.
Azure Databricks'teki dizeler, UTF-8 kodlamasıyla Unicode karakterleri olarak temsil edilir.
Varsayılan olarak Azure Databricks, dizeleri ikili UTF8 gösterimleriyle karşılaştırır. Bu, UTF8_BINARY harmanlama olarak bilinir.
UTF8_BINARY karşılaştırmaları çoğu durumda hızlı ve uygundur, ancak özellikle dil kullanan sıralama veya karşılaştırma gerektiren tüm uygulamalar için uygun olmayabilir.
Dil kullanan karşılaştırmaların yanı sıra, yaygın bir kullanım örneği büyük/küçük harf duyarlılığını zorunlu tutmadır.
Azure Databricks, özellikle bu amaçla UTF8_LCASE harmanlama işlemine sahiptir.
Karşılaştırmadan önce dizeleri hızlı UTF8_BINARY harmanlamayı kullanarak küçük harfe dönüştürür.
Dil kullanan karşılaştırmalar için Azure Databricks aşağıdaki teknolojileri kullanıyor:
- Unicode için Uluslararası Bileşenler (ICU) kitaplığı, harmanlama işlemini hesaplamak için
- Ortak Yerel Ayar Veri Deposu (CLDR) tabloları, belirli bir yerel ayar duyarlılığıyla harmanlama için.
- Unicode Yerel Ayar Veri Biçimlendirme Dili (LDML) harmanlamaları dahili olarak kodlar.
Bu teknolojiler, SQL deyimlerinde kullanılabilecek adlandırılmış harmanlamalar kümesinde kapsüllenir.
Sıralama adları
Harmanlamaları LDML belirtimlerine göre tanımlamak karmaşık ve okuması zor olabileceğinden, Azure Databricks'in kullanımı kolay adlandırılmış sistem harmanlamaları kümesi vardır.
Sözdizimi
{ UTF8_BINARY |
UTF8_LCASE |
{ UNICODE | locale } [ _ modifier [...] ] }
locale
language_code [ _ script_code ] [ _ country_code ]
modifier
{ CS | CI | AS | AI | RTRIM }
UTF8_BINARY
UTF-8 bayt gösterimine göre bayt bazında dizeleri karşılaştıran meta yerel ayarlar için ikili sıralama.
UTF8_BINARY, Azure Databricks'te dize karşılaştırması için 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').
Ayrıca bu dizilimde 'Ä' (x'C384') gibi karakterler 'Z' ve 'z' karakterlerinden büyüktür.
UTF8_LCASE
Dizeleri küçük harfe dönüştürdükten sonra UTF-8 bayt gösterimini kullanarak dizeleri karşılaştıran basit bir meta yerel ayar büyük/küçük harfe duyarlı olmayan harmanlama.
, Azure Databricks'te tanımlayıcıları için kullanılan harmanlamadır. Örneğin:
ORDER BY col COLLATE UTF8_LCASEeşittir
ORDER BY LOWER(col) COLLATE UTF8_BINARYUNICODE
ICU kök bölgesel ayarı.
CLDR'de 'kök' yerel ayarı (LDML belirtimi: 'und-u') olarak bilinen bu harmanlama, genel olarak sezgisel olmaya çalışan bir dil bağımsız düzeni uygular. Bu harmanlamada, ve karakterleri birlikte gruplandırılır. Örneğin: 'a' < 'A' < 'Ä' < 'b'. 'A', 'a' ile eşdeğer olarak kabul edilmez. Bu nedenle sıralama büyük/küçük harfe duyarlıdır. 'a', 'ä' ile eşdeğer olarak kabul edilmez. Bu nedenle harmanlama vurguya duyarlıdır.
yerel ayar
CLDR tablolarını temel alan yerel ayara duyarlı sıralama.
Yerel ayar bir dil kodu, isteğe bağlı bir betik kodu ve isteğe bağlı bir ülke kodu olarak belirtilir.
localebüyük/küçük harf farkı gözetmez.- language_code: İki harfli ISO 639-1 dil kodu.
- "
script_code : Dört harfli bir ISO 15924 betik kodu." country_code : ISO 3166-1 alfa-3 ülke koduüç harfli bir kod.
değiştirici
Harf duyarlılığı ve vurgu duyarlılığı açısından sıralama davranışını belirtir.
- CS: Büyük/küçük harfe duyarlı. Varsayılan davranış.
- CI: Büyük/küçük harfe duyarsız.
- AS: Aksan duyarlı. Varsayılan davranış.
- AI: Aksan duyarsız.
Şunlar için geçerlidir:
Databricks SQL
Databricks Runtime 16.2 ve üzeri- RTRIM: Sondaki boşluklara duyarsız. Karşılaştırmadan önce sondaki boşlukları ('u0020') kırpıyor.
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 16.2 ve üzeriRTRIMbelirtebilir,CSveyaCIveASveyaAIen fazla bir kez ve herhangi bir sırayla belirtebilirsiniz. Değiştiriciler büyük/küçük harfe duyarlı değildir.
Bir harmanlama işlenirken Azure Databricks varsayılan değerleri kaldırarak harmanlama adlarını normalleştirir.
Örneğin, SR_CYR_SRN_CS_ASSRolarak normalleştirilir.
Desteklenen harmanlamaların listesi için bkz. desteklenen harmanlamalar
Örnekler
-- 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`
Varsayılan harmanlama
Varsayılan harmanlama, STRING değişmez değerleri, parametre işaretçilerini, dize üreten STRING parametresi olmayan işlevleri kullanırken ve COLLATE yan tümcesi olmadan sütun, alan veya değişken türlerini tanımlarken geçerlidir.
Varsayılan harmanlama aşağıdaki yollardan biriyle 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 için (UPDATE, DELETE , , INSERT)ve varsayılan harmanlama
UTF8_BINARY.
Harmanlama önceliği
Azure Databricks belirli bir dize için hangi harmanlamanın kullanılacağına karar vermek için harmanlama önceliği kurallarını tanımlar.
Kurallar harmanlamalara 4 öncelik düzeyi atar:
Belirgin
Harmanlama,
COLLATE ifadesi kullanılarak bir dizeye açıkça atanmıştır. Örnekleri
-- 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Örtük
Harmanlama, sütunu, alanı, sütun takma adı, değişkeniveya yordam parametresi referansına göre örtük olarak atanır. Harmanlama Noneolmadığı sürece bir alt sorgunun sonucunu içerir.
Örnekleri
-- 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', ',')Varsayılan
Adlı ya da adlandırılmamış bir
STRING, değişmez değeri veya başka bir türden bir işlev tarafından üretilen birSTRING.Örnekleri
-- 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()Atanan harmanlama, Varsayılan Harmanlama' dir.
Yok
Birden fazla
STRINGbağımsız değişkeni olan ve farklıUNIONharmanlamalara sahip olan bir işlev, operatör veya küme işleminin (örneğinSTRING) sonucu.Örnekleri
-- 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
Sıralama türetme
bir STRING sonucu için harmanlama türetilirken, harmanlama önceliği kuralları aşağıdaki yollarla uygulanır:
Eğer ifade:
yukarıdaki tanımlarla eşleşir
Harmanlama ve öncelik tanımlandığı gibidir.
tek bir
STRINGparametresi olan veSTRINGdöndüren bir işlev veya işleçtirHarmanlama ve öncelik,
STRINGparametresininkidir.iki veya daha fazla
STRINGparametresi olan bir işlev veya işleçtiraynı harmanlamalara ve önceliklere sahip
Harmanlama ve öncelik,
STRINGparametrelerine aittir.farklı sıralamalar veya öncelik düzeni ile
C1veC2ayrı harmanlamalar olmasına izin verin veDvarsayılan harmanlama olmasına izin verin. Öncelik ve harmanlama aşağıdaki tablo tarafından belirlenir:Harmanlama ve Öncelik C1 Belirgin C1 Gizli D Varsayılan Hiç kimse C2 Açık 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 Yok 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
-- 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