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.
Pada Databricks Runtime 16.4 LTS dan yang lebih baru, tetapkan kolasi pada kolom string di tabel Delta Lake untuk mengontrol perbandingan string dan perilaku pengurutan pada tingkat kolom, seperti mengaktifkan pencocokan yang tidak membedakan huruf besar/kecil atau pengurutan yang mempertimbangkan lokal.
Untuk penjelasan lengkap tentang jenis kolase, konvensi penamaan, dan aturan prioritas, lihat Kolase.
Secara default, Delta Lake mengatur kolase untuk bidang string ke UTF8_BINARY.
Important
Mengaktifkan kolasi menambahkan fitur tabel writer collations ke tabel Delta Lake Anda, yang memengaruhi kompatibilitas dengan pembaca eksternal dan fitur platform lainnya. Tinjau bagian Batasan sebelum mengaktifkan kolade pada tabel produksi.
Membuat tabel dengan kolajek
Anda dapat menentukan pengurutan pada tingkat kolom saat membuat tabel baru. Kolase dapat diterapkan ke kolom string tingkat atas dan bidang string di dalam jenis berlapis:
CREATE TABLE catalog.schema.my_table (
id BIGINT,
name STRING COLLATE UTF8_LCASE,
metadata STRUCT<label: STRING COLLATE UNICODE>,
tags ARRAY<STRING COLLATE UTF8_LCASE>,
properties MAP<STRING, STRING COLLATE UTF8_LCASE>
) USING delta
Note
MAP kunci tidak dapat menggunakan kolasi. Hanya MAP nilai yang mendukung string yang diurutkan.
Mengubah kolase pada kolom yang sudah ada
Anda dapat mengubah kolasi kolom yang ada menggunakan ALTER TABLE.
Misalnya, untuk mengatur kolom agar menggunakan kolasi yang tidak peka terhadap huruf besar/kecil:
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE
Misalnya, untuk mengembalikan kolom ke kolater biner default:
--
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Memperbarui statistik dan tata letak data setelah mengubah kolase
Mengubah kolagasi kolom tidak menulis ulang data yang ada atau memperbarui statistik. Kueri segera mengembalikan hasil yang benar di bawah kolasi baru, tetapi pengabaian file dan pengklusteran mungkin kurang efektif sampai Anda mengikuti langkah-langkah berikut:
- Perbarui statistik lompati file untuk kolom:
ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
- Jika tabel Anda menggunakan pengklusteran cair, tulis ulang tata letak pengklusteran:
OPTIMIZE FULL my_table
- Jika tabel Anda menggunakan ZORDER, nonaktifkan pengoptimalan bertahap dan tulis ulang semua file:
SET spark.databricks.optimize.incremental = false;
OPTIMIZE my_table ZORDER BY zorder_column;
Melewati langkah-langkah ini tidak menyebabkan hasil yang salah, tetapi mungkin mengurangi performa kueri pada data historis hingga penulisan ulang lengkap berikutnya.
Pengurutan selalu diperhatikan oleh Azure Databricks dalam hasil kueri.
Menonaktifkan kolatasi untuk tabel
Untuk menghapus fitur tabel kolase, atur setiap kolom yang disatukan kembali ke UTF8_BINARY.
Pertama, jalankan perintah ini untuk setiap kolom yang disatukan:
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Kemudian, lepaskan fitur tabel:
ALTER TABLE my_table DROP FEATURE collations
Lihat Menghilangkan fitur tabel Delta Lake dan menurunkan protokol tabel untuk detail selengkapnya.
Evolusi dan kolasi skema
Saat perubahan skema menambahkan atau menggabungkan kolom yang memiliki pengurutan yang ditentukan, aturan berikut berlaku:
- Jika kolom sumber sudah ada dalam tabel target, kolase tabel target untuk kolom tersebut dipertahankan. Pengurutan kolom sumber diabaikan.
- Jika kolom sumber baru dan memiliki kolate yang ditentukan, tabel target mengadopsi kolate tersebut untuk kolom baru.
- Jika tabel target belum memiliki fitur tabel
collationsyang diaktifkan, menambahkan kolom dengan urutan tertentu akan mengaktifkannya secara otomatis.
Keterbatasan
Batasan berikut berlaku untuk tabel Delta Lake dengan kolase diaktifkan:
Kompatibilitas dan interoperabilitas:
- Pembaca eksternal yang tidak mengenali
collationsfitur tabel beralih keUTF8_BINARY, yang mungkin menghasilkan urutan atau pembandingan yang salah. - OpenSharing tidak mendukung berbagi partisi secara individual pada kolom kolasi bukan default. Bagikan tabel sebagai gantinya.
- UniForm tidak didukung untuk tabel dengan kolasi.
- Tabel Delta Lake yang dibuat secara eksternal dengan kolasi yang tidak dikenali oleh Databricks Runtime akan memunculkan pengecualian saat dikueri.
- OSS Delta Lake API untuk Scala atau Python tidak mendukung kolagasi. Gunakan API Spark SQL atau DataFrame.
Pembatasan kueri dan fitur:
- Kolom kolase tidak dapat digunakan dalam
CHECKbatasan - Kolom yang digabungkan tidak dapat direferensikan dalam ekspresi kolom yang dihasilkan.
- Kolom yang diurutkan tidak dapat digunakan dengan indeks filter bloom (tidak digunakan lagi)
- Kolom kolase tidak dapat direferensikan dalam kueri stateful Streaming Terstruktur (agregasi, gabungan, deduplikasi)
- Kunci
MAPtidak dapat menjadi string yang disatukan. HanyaMAPnilai yang mendukung kolaset