Dukungan pengurutan untuk Delta Lake

Anda dapat menentukan kolasi pada bidang string dalam tabel Delta untuk mengatur perilaku perbandingan string dan pengurutan, seperti mengaktifkan pencocokan yang tidak peka terhadap huruf besar/kecil atau urutan yang sesuai lokal. Ini membutuhkan Databricks Runtime 16.4 LTS ke atas.

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.

Penting

Mengaktifkan pengurutan menambahkan fitur tabel penulis ke tabel Delta 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

Nota

MAP kunci tidak dapat menggunakan kolasi. Hanya MAP nilai yang mendukung string yang diurutkan.

Mengubah kolase pada kolom yang sudah ada

Anda dapat mengubah pengaturan pengurutan kolom yang sudah ada menggunakan ALTER TABLE:

-- Set a column to case-insensitive collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE

-- Revert a column to the default binary collation
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 akan 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, pertama-tama atur setiap kolom yang disatukan kembali ke UTF8_BINARY:

-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Kemudian hapus 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 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.
  • Berbagi Delta tidak mendukung pembagian partisi individual pada kolom pengurutan non-default. Bagikan tabel sebagai gantinya.
  • UniForm tidak didukung untuk tabel dengan pengurutan.
  • Tabel Delta yang dibuat secara eksternal dengan pengurutan yang tidak dikenali oleh Databricks Runtime akan menimbulkan pengecualian disaat dikueri.
  • OSS Delta Lake API untuk Scala atau Python tidak mendukung kolaterasi. 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