Membaca tabel Delta dengan klien Iceberg
Artikel ini menyediakan detail untuk memungkinkan pembacaan Iceberg pada tabel yang disimpan dengan Delta Lake di Azure Databricks. Fitur ini memerlukan Databricks Runtime 14.3 LTS atau lebih tinggi.
Catatan
Fungsionalitas ini sebelumnya disebut Delta Lake Universal Format (UniForm).
Anda dapat mengonfigurasi koneksi eksternal agar Katalog Unity bertindak sebagai katalog Iceberg. Lihat Membaca tabel Databricks menggunakan klien Iceberg.
Bagaimana cara kerja Iceberg reads (UniForm)?
Delta Lake dan Iceberg terdiri dari file data Parquet dan lapisan metadata. Mengaktifkan pembacaan Iceberg mengonfigurasi tabel Anda untuk secara otomatis menghasilkan metadata Iceberg secara asinkron, tanpa menulis ulang data, sehingga klien Iceberg dapat membaca tabel Delta yang ditulis oleh Azure Databricks. Satu salinan file data melayani beberapa format.
Penting
- Tabel dengan fitur Iceberg diaktifkan menggunakan Zstandard alih-alih Snappy sebagai codec kompresi untuk file data Parquet yang mendasarinya.
- Pembuatan metadata Iceberg berjalan secara asinkron pada komputasi yang digunakan untuk menulis data ke tabel Delta, yang dapat meningkatkan penggunaan sumber daya driver.
- Untuk dokumentasi fitur tabel lama
IcebergCompatV1
UniForm, lihat Legacy UniForm IcebergCompatV1.
Persyaratan
Untuk mengaktifkan pembacaan Iceberg, persyaratan berikut harus dipenuhi:
- Tabel Delta harus didaftarkan ke Katalog Unity. Tabel terkelola dan tabel eksternal didukung.
- Tabel harus mengaktifkan pemetaan kolom. Lihat ganti nama dan hapus kolom dengan pemetaan kolom Delta Lake.
- Tabel Delta harus memiliki
minReaderVersion
>= 2 danminWriterVersion
>= 7. Lihat Bagaimana Azure Databricks mengelola kompatibilitas fitur Delta Lake?. - Menulis ke tabel harus menggunakan Databricks Runtime 14.3 LTS atau lebih tinggi.
Catatan
Anda tidak dapat mengaktifkan vektor penghapusan pada tabel dengan pembacaan Iceberg diaktifkan.
Gunakan REORG
untuk menonaktifkan dan membersihkan vektor penghapusan sambil mengaktifkan pembacaan Iceberg pada tabel yang sudah ada dengan vektor penghapusan aktif. Lihat untuk mengaktifkan atau meningkatkan dukungan pembacaan Iceberg dengan menggunakan REORG.
Mengaktifkan pembacaan Iceberg (UniForm)
Penting
Saat Anda mengaktifkan pembacaan Iceberg, fitur protokol tulis IcebergCompatV2
ditambahkan ke tabel. Hanya klien yang mendukung fitur tabel ini yang dapat menulis ke tabel dengan bacaan Iceberg yang diaktifkan. Di Azure Databricks, Anda harus menggunakan Databricks Runtime 14.3 LTS atau lebih tinggi untuk menulis ke tabel yang diaktifkan.
Anda dapat menonaktifkan pembacaan Iceberg dengan menghapus pengaturan properti tabel delta.universalFormat.enabledFormats
. Peningkatan ke versi protokol pembaca dan penulis Delta Lake tidak dapat dibatalkan.
Anda harus mengatur properti tabel berikut untuk mengaktifkan pembacaan Iceberg:
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
Ketika Anda pertama kali mengaktifkan pembacaan Iceberg, pembuatan metadata asinkron dimulai. Tugas ini harus diselesaikan sebelum klien eksternal dapat mengkueri tabel menggunakan Iceberg. Lihat Memeriksa status pembuatan metadata Iceberg.
Untuk daftar batasan, lihat batasan .
Mengaktifkan pembacaan Iceberg selama pembuatan tabel
Pemetaan kolom harus diaktifkan untuk menggunakan pembacaan Iceberg. Ini terjadi secara otomatis jika Anda mengaktifkan pembacaan Iceberg selama pembuatan tabel, seperti dalam contoh berikut:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Mengaktifkan pembacaan Iceberg pada tabel yang sudah ada
Di Databricks Runtime 15.4 LTS ke atas, Anda dapat mengaktifkan atau meningkatkan pembacaan Iceberg pada tabel yang ada menggunakan sintaks berikut:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Mengaktifkan atau meningkatkan dukungan baca Iceberg menggunakan REORG
Anda dapat menggunakan REORG
untuk mengaktifkan membaca Iceberg dan mengkonversi file data dasar, seperti dalam contoh berikut:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Gunakan REORG
jika salah satu hal berikut ini benar:
- Tabel Anda memiliki vektor penghapusan yang diaktifkan.
- Anda sebelumnya mengaktifkan
IcebergCompatV1
versi UniForm Iceberg. - Anda perlu membaca dari mesin Iceberg yang tidak mendukung file Parquet bergaya Apache Hive, seperti Athena atau Redshift.
Kapan pembuatan metadata Iceberg terjadi?
Azure Databricks memicu pembuatan metadata secara asinkron setelah transaksi penulisan Delta Lake selesai. Proses pembuatan metadata ini menggunakan komputasi yang sama yang menyelesaikan transaksi Delta.
Catatan
Anda juga dapat memicu pembuatan metadata Iceberg secara manual. Lihat Memicu konversi metadata Iceberg secara manual.
Untuk menghindari latensi penulisan yang terkait dengan pembuatan metadata, tabel Delta dengan commit yang sering mungkin mengelompokkan beberapa commit Delta ke dalam satu commit metadata Iceberg.
Delta Lake memastikan bahwa hanya satu proses pembuatan metadata yang sedang berlangsung pada sumber daya komputasi tertentu. Commit yang dapat memicu proses pembuatan metadata kedua secara bersamaan berhasil di-commit ke Delta tetapi tidak memicu proses pembuatan metadata Iceberg asinkron. Ini mencegah latensi kaskade untuk pembuatan metadata untuk beban kerja dengan penerapan yang sering (detik hingga menit di antara penerapan).
Lihat versi tabel Delta dan Iceberg.
versi tabel Delta dan Iceberg
Delta Lake dan Iceberg memungkinkan kueri perjalanan waktu dengan menggunakan versi tabel atau stempel waktu yang tersimpan di metadata tabel.
Secara umum, versi tabel Delta tidak selaras dengan versi Iceberg dengan tanda waktu penerapan atau ID versi. Untuk memverifikasi versi tabel Delta mana yang sesuai dengan versi tabel Iceberg tertentu, Anda dapat menggunakan properti tabel yang sesuai. Lihat Memeriksa status pembuatan metadata Iceberg.
Periksa status pembuatan metadata Iceberg
Mengaktifkan pembacaan Iceberg pada tabel menambahkan bidang berikut ke Metadata tabel Unity Catalog dan Iceberg untuk melacak status pembuatan metadata:
Bidang metadata | Deskripsi |
---|---|
converted_delta_version |
Versi terbaru tabel Delta yang metadata Iceberg-nya berhasil dihasilkan. |
converted_delta_timestamp |
Tanda waktu penerapan Delta terbaru yang metadata Iceberg berhasil dihasilkan. |
Di Azure Databricks, Anda dapat meninjau bidang metadata ini dengan melakukan salah satu hal berikut ini:
- Meninjau bagian yang
Delta Uniform Iceberg
dikembalikan olehDESCRIBE EXTENDED table_name
. - Meninjau metadata tabel dengan Catalog Explorer.
- Menggunakan REST API untuk mendapatkan tabel.
Lihat dokumentasi untuk klien pembaca Iceberg Anda tentang cara meninjau properti tabel di luar Azure Databricks. Untuk OSS Apache Spark, Anda dapat melihat properti ini menggunakan sintaks berikut:
SHOW TBLPROPERTIES <table-name>;
Memicu konversi metadata Iceberg secara manual
Anda dapat memicu pembuatan metadata Iceberg secara manual untuk versi terbaru tabel Delta. Operasi ini berjalan secara sinkron, yang berarti bahwa ketika selesai, konten tabel yang tersedia di Iceberg mencerminkan versi terbaru tabel Delta yang tersedia saat proses konversi dimulai.
Operasi ini seharusnya tidak diperlukan dalam kondisi normal, tetapi dapat membantu jika Anda mengalami hal berikut:
- Kluster berakhir sebelum pembuatan metadata otomatis berhasil.
- Kesalahan atau kegagalan pekerjaan mengganggu pembuatan metadata.
- Klien yang tidak mendukung pembuatan metadata UniForm Iceberg menulis ke tabel Delta.
Gunakan sintaks berikut untuk memicu pembuatan metadata Iceberg secara manual:
MSCK REPAIR TABLE <table-name> SYNC METADATA
Lihat REPAIR TABLE.
Membaca Iceberg menggunakan jalur JSON metadata
Beberapa klien Iceberg mengharuskan Anda menyediakan jalur ke file metadata versi untuk mendaftarkan tabel Iceberg eksternal. Setiap kali Azure Databricks mengonversi versi baru tabel Delta ke Iceberg, Azure Databricks membuat file JSON metadata baru.
Klien yang menggunakan jalur JSON metadata untuk mengonfigurasi Iceberg termasuk BigQuery. Lihat dokumentasi untuk klien pembaca Iceberg untuk detail konfigurasi.
Delta Lake menyimpan metadata Iceberg di bawah direktori tabel menggunakan pola berikut:
<table-path>/metadata/<version-number>-<uuid>.metadata.json
Di Azure Databricks, Anda dapat meninjau lokasi metadata ini dengan melakukan salah satu hal berikut:
- Meninjau bagian yang
Delta Uniform Iceberg
dikembalikan olehDESCRIBE EXTENDED table_name
. - Meninjau metadata tabel dengan Catalog Explorer.
- Menggunakan perintah berikut dengan REST API:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>
Tanggapan mencakup informasi berikut:
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
Penting
Klien pembaca Iceberg berbasis jalur mungkin memerlukan memperbarui dan menyegarkan jalur JSON metadata secara manual untuk membaca versi tabel saat ini. Pengguna mungkin mengalami kesalahan saat mengkueri tabel Iceberg menggunakan versi kedaluarsa karena file data Parquet dihapus dari tabel Delta dengan VACUUM
.
Batasan
Batasan berikut ada untuk semua tabel dengan bacaan Iceberg diaktifkan:
- Pembacaan Iceberg tidak berfungsi pada tabel dengan vektor penghapusan diaktifkan. Lihat Apa itu vektor penghapusan?.
- Tabel Delta yang telah diaktifkan untuk pembacaan Iceberg tidak mendukung tipe
VOID
. - Dukungan klien Iceberg bersifat baca-saja. Penulisan tidak didukung.
- Pengguna pembaca Iceberg mungkin memiliki batasan masing-masing, meskipun Azure Databricks mendukung pembacaan Iceberg. Lihat dokumentasi untuk klien pilihan Anda.
- Penerima Delta Sharing hanya dapat membaca tabel dalam bentuk Delta, meskipun fitur pembacaan Iceberg diaktifkan.
- Beberapa fitur tabel Delta Lake yang digunakan oleh pembacaan Iceberg tidak kompatibel dengan beberapa klien pembaca Delta Sharing. Lihat Apa itu Berbagi Delta?.
Change Data Feed berfungsi untuk klien Delta ketika pembacaan di Iceberg diaktifkan tetapi tidak didukung di Iceberg.