Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Fitur ini ada di Pratinjau Umum.
Berlaku untuk: Databricks SQL
Databricks Runtime 16.1 ke atas
Kolase adalah sekumpulan aturan yang menentukan bagaimana perbandingan string dilakukan. Kolasi digunakan untuk membandingkan string dalam urutan tidak peka huruf besar/kecil, tidak peka aksen, atau tidak peka spasi akhir, atau untuk mengurutkan string dalam urutan yang memperhatikan bahasa tertentu.
String di Azure Databricks direpresentasikan sebagai karakter Unicode yang dikodekanUTF-8.
Secara default, Azure Databricks membandingkan string dengan representasi UTF8 biner mereka. Ini dikenal sebagai kolase UTF8_BINARY
.
UTF8_BINARY
perbandingan cepat dan tepat dalam banyak kasus, tetapi mungkin tidak cocok untuk semua aplikasi, terutama aplikasi yang memerlukan pengurutan atau perbandingan yang mempertimbangkan bahasa.
Selain perbandingan sadar bahasa, kasus penggunaan umum adalah menerapkan tidak sensitif terhadap huruf besar/kecil.
Azure Databricks memiliki kolasi UTF8_LCASE
khusus untuk tujuan ini.
Ini mengonversi string menjadi huruf kecil sebelum membandingkannya menggunakan pengurutan cepat UTF8_BINARY
.
Untuk perbandingan sadar bahasa, Azure Databricks menggunakan teknologi berikut:
- Pustaka Komponen Internasional untuk Unicode (ICU) untuk melakukan penyusunan
- Tabel Common Locale Data Repository (CLDR) untuk pengurutan yang disesuaikan dengan lokasi tertentu.
- Unicode Locale Data Markup Language (LDML) untuk mengodekan kolase secara internal.
Teknologi ini dienkapsulasi dalam satu set kolase bernama yang dapat digunakan dalam pernyataan SQL.
Nama kolasi
Karena mengidentifikasi pengurutan berdasarkan spesifikasi LDML mereka bisa rumit dan menantang untuk dibaca, Azure Databricks memiliki serangkaian pengurutan sistem yang sudah diberi nama dan lebih mudah digunakan.
Sintaksis
{ UTF8_BINARY |
UTF8_LCASE |
{ UNICODE | locale } [ _ modifier [...] ] }
locale
language_code [ _ script_code ] [ _ country_code ]
modifier
{ CS | CI | AS | AI | RTRIM }
UTF8_BINARY
Urutan biner meta-locale yang membandingkan string satu per satu berdasarkan representasi byte UTF-8.
UTF8_BINARY
adalah kolate default dan paling ringan untuk perbandingan string di Azure Databricks.Dalam kolatasi ini 'A' (x'65') < 'B' (x'66') < ... < 'Z' (x'90').
Namun, 'Z' (x'90') < 'a' (x'97'), dan 'A' (x'65') <> 'a' (x'97').
Selanjutnya, karakter seperti 'Ä' (x'C384') lebih besar dari 'Z' dan 'z' dalam kolase ini.
UTF8_LCASE
Kolasi tidak peka huruf besar/kecil meta-locale ringan yang membandingkan string menggunakan representasi byte UTF-8 setelah mengonversi string menjadi huruf kecil.
UTF8_LCASE
adalah kolasasi yang digunakan untuk pengidentifikasi di Azure Databricks.Misalnya:
ORDER BY col COLLATE UTF8_LCASE
setara dengan
ORDER BY LOWER(col) COLLATE UTF8_BINARY
UNICODE
Lokal dasar ICU.
Pengurutan ini, yang dikenal dalam CLDR sebagai 'locale' root (spesifikasi LDML: 'und-u') menetapkan urutan yang tidak bergantung pada bahasa, dengan tujuan untuk menjadi intuitif. Dalam kolasi ini, karakter mirip dikelompokkan. Misalnya: 'a' < 'A' < 'Ä' < 'b'. 'A' tidak dianggap setara dengan 'a'. Oleh karena itu, pengurutan membedakan huruf besar dan kecil. 'a' tidak dianggap setara dengan 'ä'. Oleh karena itu, pengurutan sensitif terhadap aksen.
Lokasi
Pengurutan yang peka terhadap lokalitas berdasarkan tabel CLDR.
Lokal ditentukan sebagai kode bahasa, kode skrip opsional, dan kode negara opsional.
locale
tidak peka terhadap huruf besar atau kecil.- language_code: Kode bahasa ISO 639-1 dua huruf.
script_code : Kode skrip empat hurufISO 15924 .- country_code: Kode negara ISO 3166-1 alpha-3 tiga huruf.
Pengubah
Menentukan perilaku penyusunan terkait sensitivitas huruf besar/kecil dan aksen.
- CS: Peka huruf besar/kecil. Perilaku bawaan.
- CI: Tidak peka huruf besar/kecil.
- AS: Sensitif terhadap aksen. Perilaku bawaan.
- AI: Tidak peka terhadap aksen.
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.2 ke atas
- RTRIM: Tidak peka terhadap spasi di akhir. Memangkas spasi di belakang ('u0020') sebelum perbandingan.
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.2 dan versi lebih baru
Anda dapat menentukan
RTRIM
, entahCS
atauCI
, dan entahAS
atauAI
masing-masing maksimal satu kali dan dalam urutan apa pun. Pengubah itu sendiri tidak peka huruf besar/kecil.
Saat memproses kolasi, Azure Databricks menormalkan nama kolasi dengan menghapus default.
Misalnya, SR_CYR_SRN_CS_AS
dinormalisasi ke SR
.
Untuk daftar kolatasi yang didukung, lihat Kolate yang didukung.
Contoh
-- 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`
Pengurutan bawaan
Kolase default berlaku saat menggunakan STRING
literal, penanda parameter, fungsi tanpa parameter STRING
menghasilkan string, dan saat menentukan jenis kolom, bidang, atau variabel tanpa klausa COLLATE
.
Pengurutan default diperoleh dengan salah satu cara berikut:
Untuk pernyataan DDL seperti
ALTER TABLE
, ,CREATE VIEW
,CREATE TABLE
danCREATE FUNCTION
:- Kolase default adalah kolase default objek yang sedang dibuat atau diubah.
- Jika tidak ada klausa
DEFAULT COLLATION
yang ditentukan, pengurutan default adalahUTF8_BINARY
.
Untuk pernyataan DML (UPDATE, DELETE, INSERT, MERGE), dan kueri , kolase defaultnya adalah
UTF8_BINARY
.
Prioritas kolase
Untuk memutuskan kolase mana yang akan digunakan untuk string tertentu, Azure Databricks menentukan aturan prioritas kolase.
Aturan menetapkan 4 tingkat prioritas untuk kolase:
Eksplisit
Pengurutan telah secara eksplisit ditetapkan ke string menggunakan ekspresi COLLATE.
Contoh
-- 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
Implisit
Pengurutan secara implisit ditetapkan oleh kolom , kolom , alias-kolom , variabel , atau parameter rutin referensi. Ini termasuk hasil subkueri selama kolase bukan Tidak Ada.
Contoh
-- 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', ',')
Standar
STRING
parameter literal, bernama atau tidak bernama, atau penanda atauSTRING
diproduksi oleh fungsi dari jenis lain.Contoh
-- 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()
Kolase yang ditetapkan adalah Kolase Default.
Tidak
Hasil
dari fungsi, operator, atau operasi set (misalnya ) yang mengambil lebih dari satu argumen dengan kolasi implisit yang berbeda. Contoh
-- 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
Derivasi kolasi
Saat mengambil kolase untuk hasil STRING
, aturan prioritas kolase diterapkan dengan cara berikut:
Jika ekspresi:
cocok dengan definisi di atas
Pengurutan dan prioritas ditentukan sebagaimana didefinisikan.
adalah fungsi atau operator dengan parameter
STRING
tunggal, mengembalikanSTRING
Pengurutan dan prioritas mengikuti parameter
STRING
.adalah fungsi atau operator dengan dua parameter
STRING
atau lebihdengan pengurutan dan prioritas yang sama
Pengurutan dan prioritasnya adalah sesuai dengan parameter
STRING
.dengan kolasi atau prioritas yang berbeda
Biarkan
C1
danC2
menjadi kolase yang berbeda dan biarkanD
menjadi kolase default. Prioritas dan kolase ditentukan oleh tabel berikut:Kolase dan Prioritas C1 Eksplisit C1 Implisit D Pengaturan Awal Tidak C2 Eksplisit Kesalahan C2 Eksplisit C2 Eksplisit C2 Eksplisit C2 Implisit C1 Eksplisit Tidak C2 Implisit Tidak D Default C1 Eksplisit C1 Implisit D Pengaturan Awal Tidak Tidak C1 Eksplisit Tidak Tidak Tidak
Contoh
> 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