Aracılığıyla paylaş


Harmanlama

Önemli

Bu özellik Genel Önizlemesürümündedir.

Şunlar için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi 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:

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_LCASE
    

    eşittir

    ORDER BY LOWER(col) COLLATE UTF8_BINARY
    
  • UNICODE

    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. locale bü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: evet olarak işaretlendi Databricks SQL evet olarak işaretlendi 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:evet olarak işaretli Databricks SQL evet olarak işaretli Databricks Runtime 16.2 ve üzeri

    RTRIMbelirtebilir, CS veya CIve AS veya AI en 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 TABLE ve CREATE FUNCTION gibi DDL deyimleri için:

    • Varsayılan harmanlama, oluşturulan veya değiştirilen nesnenin varsayılan harmanlamasıdır.
    • DEFAULT COLLATION yan tümcesi belirtilmezse, varsayılan harmanlama UTF8_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:

  1. 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
    
  2. Ö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', ',')
    
  3. 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 bir STRING.

    Ö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.

  4. Yok

    Birden fazla STRING bağımsız değişkeni olan ve farklı UNION harmanlamalara sahip olan bir işlev, operatör veya küme işleminin (örneğin STRING) 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:

  1. yukarıdaki tanımlarla eşleşir

    Harmanlama ve öncelik tanımlandığı gibidir.

  2. tek bir STRING parametresi olan ve STRING döndüren bir işlev veya işleçtir

    Harmanlama ve öncelik, STRING parametresininkidir.

  3. iki veya daha fazla STRING parametresi olan bir işlev veya işleçtir

    1. aynı harmanlamalara ve önceliklere sahip

      Harmanlama ve öncelik, STRING parametrelerine aittir.

    2. farklı sıralamalar veya öncelik düzeni ile

      C1 ve C2 ayrı harmanlamalar olmasına izin verin ve D varsayı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