Dukungan pengurutan untuk Delta Lake
Anda dapat menentukan kolasi dari bidang string dalam tabel Delta pada Databricks Runtime 16.1 dan versi lebih baru.
Mengaktifkan kolasi untuk tabel akan menambahkan fitur collations-preview
pada tabel penulis. Anda dapat membaca tabel dengan kolase diaktifkan di Databricks Runtime 15.4 ke atas. Lihat Bagaimana Azure Databricks mengelola kompatibilitas fitur Delta Lake?.
Nota
Secara default, Delta Lake mengatur kolase untuk bidang string ke UTF8_BINARY
.
Buat tabel dengan pengurutan di tingkat kolom
Anda bisa membuat tabel baru dengan kolater di tingkat kolom menggunakan perintah berikut:
CREATE TABLE $tableName (
nonCollatedColName STRING,
collatedColName STRING COLLATE UNICODE,
structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
mapColName MAP<STRING, STRING COLLATE UNICODE>,
arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta
Mengubah kolom tabel untuk menentukan kolase
Anda bisa memperbarui kolom yang sudah ada dengan menggunakan kolasi menggunakan perintah berikut:
ALTER TABLE tableName ALTER COLUMN columnName TYPE newType
Untuk menghapus kolase non-default (jika ada):
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY
Untuk mengubah kolatasi kolom menjadi utf8_lcase
:
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE
Mengubah kolase untuk tabel tidak secara otomatis memperbarui statistik atau tata letak data untuk data yang ditulis sebelumnya. Untuk meningkatkan kemampuan melompati file melalui data historis di bawah pengurutan baru, Databricks merekomendasikan hal berikut:
- Jalankan
ANALYZE table_name COMPUTE DELTA STATISTICS
untuk memperbarui statistik lompati file untuk file data yang ada. - Untuk tabel dengan pengklusteran cair diaktifkan, jalankan
OPTIMIZE FULL table_name
untuk memperbarui pengklusteran cairan. - Untuk tabel yang menggunakan
ZORDER
, lakukan hal berikut:Nonaktifkan optimalisasi bertahap dalam Sesi Spark dengan menggantikan konfigurasi Spark default menggunakan perintah berikut:
SET spark.databricks.optimize.incremental=false
Jalankan
OPTIMIZE table_name ZORDER BY zorder_column
untuk menulis ulang semua file data yang ada.
Pengurutan akan selalu dihormati oleh Azure Databricks dalam hasil kueri.
Menonaktifkan kolatasi untuk tabel
Anda harus secara eksplisit menonaktifkan pengurutan untuk setiap kolom string dalam tabel sebelum menghapus fitur pengurutan.
Gunakan sintaks berikut untuk mengatur kolase kolom ke UTF8_BINARY
:
ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY
Untuk menghilangkan fitur tabel, jalankan perintah berikut:
ALTER TABLE table_name
DROP FEATURE collations-preview
Lihat fitur Drop Delta tabel .
Evolusi dan penyusunan skema
Kolasi berinteraksi dengan evolusi skema menggunakan aturan berikut:
- Jika kolom sumber sudah ada dalam tabel target, kolase kolom dalam tabel target tetap tidak berubah.
- Jika kolom sumber memiliki kolater yang ditentukan, kolom yang ditambahkan ke tabel target menggunakan kolatasi yang ditentukan.
- Jika tabel target tidak memiliki fitur pengurutan diaktifkan saat kolom dengan pengurutan ditambahkan, fitur tabel
collations-preview
diaktifkan.
Keterbatasan
Batasan berikut ada untuk tabel dengan kolase diaktifkan:
- Tabel Delta yang dibuat secara eksternal dengan kolase yang tidak dikenali oleh Databricks Runtime melemparkan pengecualian saat dikueri.
- Tidak ada dukungan untuk Delta Sharing.
- Kolom kolase tidak dapat digunakan dengan batasan
CHECK
. - Kolom yang digenerasi tidak dapat menggunakan pengurutan.
- Kolom kolase tidak dapat digunakan dengan kolom indeks filter mekar.
- Tidak ada dukungan untuk kolaterasi di OSS Delta Lake API untuk Scala atau Python. Anda harus menggunakan API Spark SQL atau DataFrame untuk mengaktifkan kolase.
- Timpa partisi dinamis tidak didukung pada kolom yang disatukan.
- Kolom yang telah digabungkan tidak dapat direferensikan dalam kueri stateful Structured Streaming.
- Pembaca eksternal yang tidak memenuhi fitur tabel
collations-preview
akan kembali ke pengurutan default dariUTF8_BINARY
. -
MAP
tidak dapat memiliki kunci yang merupakan string yang disatukan. - UniForm tidak berfungsi dengan kolasi.