Dukungan kolasi untuk Delta Lake

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:

  1. Perbarui statistik lompati file untuk kolom:
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Jika tabel Anda menggunakan pengklusteran cair, tulis ulang tata letak pengklusteran:
   OPTIMIZE FULL my_table
  1. 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 collations yang 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 collations fitur tabel beralih ke UTF8_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 CHECK batasan
  • 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 MAP tidak dapat menjadi string yang disatukan. Hanya MAP nilai yang mendukung kolaset

Sumber daya tambahan