Penemuan partisi untuk tabel eksternal
Artikel ini menjelaskan strategi penemuan partisi default untuk tabel eksternal Unity Catalog dan pengaturan opsional untuk mengaktifkan log metadata partisi yang membuat penemuan partisi konsisten dengan metastore Apache Hive.
Databricks merekomendasikan untuk mengaktifkan pengelogan metadata partisi untuk meningkatkan kecepatan baca dan performa kueri untuk tabel eksternal Unity Catalog dengan partisi.
Apa strategi penemuan partisi default untuk Katalog Unity?
Secara default, Unity Catalog secara rekursif mencantumkan semua direktori di lokasi tabel untuk menemukan partisi secara otomatis. Untuk tabel besar dengan banyak direktori partisi, ini dapat meningkatkan latensi untuk banyak operasi tabel.
Menggunakan pengelogan metadata partisi
Penting
Fitur ini ada di Pratinjau Publik.
Di Databricks Runtime 13.3 LTS ke atas, Anda dapat secara opsional mengaktifkan pengelogan metadata partisi, yang merupakan strategi penemuan partisi untuk tabel eksternal yang terdaftar ke Unity Catalog. Perilaku ini konsisten dengan strategi penemuan partisi yang digunakan dalam metastore Apache Hive. Perilaku ini hanya berdampak pada tabel eksternal Unity Catalog yang memiliki partisi dan menggunakan Parquet, ORC, CSV, atau JSON. Databricks merekomendasikan untuk mengaktifkan perilaku baru untuk meningkatkan kecepatan baca dan performa kueri untuk tabel ini.
Penting
Tabel dengan pengelogan metadata partisi diaktifkan menunjukkan perubahan perilaku untuk penemuan partisi. Alih-alih secara otomatis memindai lokasi tabel untuk partisi, Katalog Unity hanya menghormati partisi yang terdaftar dalam metadata partisi. Lihat Menambahkan, menghilangkan, atau memperbaiki metadata partisi secara manual.
Perilaku ini akan menjadi default dalam versi Databricks Runtime di masa mendatang. Tabel dengan fitur ini diaktifkan hanya dapat dibaca atau ditulis menggunakan Databricks Runtime 13.3 LTS ke atas.
Catatan
Anda harus mencoba mengkueri tabel dengan Databricks Runtime 12.2 LTS atau di bawah ini untuk mengonfirmasi bahwa tabel tidak menggunakan perilaku log partisi baru.
Mengaktifkan pengelogan metadata partisi
Untuk mengaktifkan pengelogan metadata partisi pada tabel, Anda harus mengaktifkan Spark conf untuk SparkSession Anda saat ini lalu membuat tabel eksternal. Pengaturan ini hanya diperlukan dalam SparkSession yang membuat tabel. Setelah Anda membuat tabel dengan pengelogan metadata partisi diaktifkan, pengaturan ini tetap ada sebagai bagian dari metadata tabel dan menggunakan fitur di semua beban kerja berikutnya.
Sintaks berikut menunjukkan penggunaan SQL untuk mengatur Spark conf dalam buku catatan. Anda juga dapat mengatur konfigurasi Spark saat mengonfigurasi komputasi.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Penting
Anda hanya dapat membaca dan menulis tabel dengan pengelogan metadata partisi yang diaktifkan di Databricks Runtime 13.3 LTS ke atas. Jika Anda memiliki beban kerja yang berjalan pada Databricks Runtime 12.2 LTS atau di bawahnya yang harus berinteraksi dengan tabel, jangan gunakan pengaturan ini.
Tabel eksternal tidak menghapus file data yang mendasar saat Anda menjatuhkannya. Databricks merekomendasikan penggunaan CREATE OR REPLACE
sintaks untuk meningkatkan tabel untuk menggunakan pengelogan metadata partisi, seperti dalam contoh berikut:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Katalog Unity memberlakukan aturan pada jalur yang tumpang tindih untuk tabel dan volume. Anda tidak dapat mendaftarkan tabel Unity Catalog baru pada kumpulan file data jika tabel sudah ada di lokasi tersebut.
Bekerja dengan tabel dengan metadata partisi
Databricks merekomendasikan penggunaan nama tabel dalam semua bacaan dan tulis terhadap semua tabel yang terdaftar di Unity Catalog. Untuk tabel dengan metadata partisi, ini menjamin bahwa partisi baru ditambahkan ke daftar tabel ke Katalog Unity dan kueri tersebut terhadap tabel membaca semua partisi terdaftar.
Menggunakan pola berbasis jalur untuk baca atau tulis dapat mengakibatkan partisi diabaikan atau tidak terdaftar ke metastore Katalog Unity. Lihat Batasan.
Mencantumkan partisi
Gunakan perintah berikut untuk menampilkan semua partisi yang terdaftar ke Unity Catalog sebagai metadata partisi:
SHOW PARTITIONS <table-name>
Untuk memeriksa apakah satu partisi terdaftar ke Unity Catalog, gunakan perintah berikut:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Menambahkan, menghilangkan, atau memperbaiki metadata partisi secara manual
Katalog Unity mengharuskan semua partisi untuk tabel eksternal terkandung dalam direktori yang terdaftar menggunakan LOCATION
klausul selama pendaftaran tabel.
Dengan metadata partisi diaktifkan, penemuan partisi otomatis di lokasi tabel dinonaktifkan. Jika sistem eksternal menulis data ke lokasi tabel atau Anda menggunakan penulisan berbasis jalur untuk menambahkan atau menimpa rekaman dalam tabel Anda, Anda harus memperbaiki metadata partisi secara manual.
Azure Databricks menggunakan partisi gaya Apache Hive untuk menyimpan tabel yang didukung oleh Parquet, ORC, CSV, dan JSON. Partisi gaya Apache Hive berisi pasangan kunci-nilai yang disambungkan oleh tanda sama dengan di direktori partisi, misalnya year=2021/month=01/
.
Jika tabel Anda menggunakan partisi gaya Apache Hive, Anda bisa menggunakan MSCK REPAIR
untuk menyinkronkan metadata partisi di Katalog Unity dengan partisi yang ada di lokasi tabel. Contoh sintaks berikut menunjukkan operasi umum:
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
Lihat REPAIR TABLE.
Tentukan jalur secara manual untuk jenis partisi lainnya
Jika tabel Anda tidak menggunakan partisi gaya Apache Hive, Anda harus menentukan lokasi partisi secara manual saat menambahkan partisi. Menentukan partisi secara manual juga dapat mengurangi latensi dibandingkan MSCK REPAIR
dengan sintaksis, terutama untuk tabel dengan sejumlah besar partisi. Contoh sintaks berikut menunjukkan penambahan partisi:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
Anda juga dapat menggunakan ALTER TABLE
sintaks untuk menghilangkan, mengganti nama, memulihkan, dan mengatur lokasi untuk partisi. Lihat ALTER TABLE ... PARTITION.
Menonaktifkan metadata partisi baru
Keyakinan Spark yang mengontrol apakah tabel baru menggunakan metadata partisi dinonaktifkan secara default. Anda juga dapat secara eksplisit menonaktifkan perilaku ini. Sintaks berikut menggunakan SQL untuk menonaktifkan Spark conf:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Ini hanya mengontrol apakah tabel yang dibuat di SparkSession menggunakan metadata partisi atau tidak. Untuk menonaktifkan metadata partisi pada tabel yang menggunakan perilaku, Anda harus menghilangkan dan membuat ulang tabel dalam SparkSession yang tidak mengaktifkan Spark conf.
Catatan
Meskipun Anda tidak dapat membaca atau menulis ke tabel dengan metadata partisi diaktifkan di Databricks Runtime 12.2 LTS atau di bawahnya, Anda dapat menjalankan DROP
atau CREATE OR REPLACE TABLE
pernyataan terhadap tabel ini jika Anda memiliki hak istimewa yang memadai di Katalog Unity.
Batasan
Keterbatasan berikut ada:
- Anda tidak dapat membaca atau menulis ke tabel dengan metadata partisi diaktifkan menggunakan Databricks Runtime 12.2 LTS atau di bawahnya.
- Membaca tabel menggunakan jalur direktori mengembalikan semua partisi termasuk yang telah ditambahkan atau dihilangkan secara manual.
- Jika Anda menyisipkan atau menimpa rekaman dalam tabel menggunakan jalur alih-alih nama tabel, metadata partisi tidak direkam.
- Format file Avro tidak didukung.