KONVERSI KE DELTA
Berlaku untuk: pemeriksaan Databricks SQL Databricks Runtime
Mengonversi tabel Parquet yang ada menjadi tabel Delta di tempat. Perintah ini mencantumkan semua file dalam direktori, membuat log transaksi Delta Lake yang melacak file-file ini, dan secara otomatis menyimpulkan skema data dengan membaca footer semua file Parquet. Proses konversi mengumpulkan statistik untuk meningkatkan performa kueri pada tabel Delta yang dikonversi. Jika Anda memberikan nama tabel, metastore juga diperbarui untuk mencerminkan bahwa tabel sekarang menjadi tabel Delta.
Perintah ini mendukung konversi tabel Iceberg yang format file dasarnya adalah Parquet. Dalam hal ini, konverter menghasilkan log transaksi Delta Lake berdasarkan manifes file asli tabel Iceberg, skema, dan informasi partisi.
Sintaks
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Parameter
-
Pengidentifikasi tabel yang memenuhi syarat secara opsional atau jalur ke
parquet
direktori file atauiceberg
. Nama tidak boleh menyertakan spesifikasi temporal. Untuk tabel Iceberg, Anda hanya dapat menggunakan jalur, karena mengonversi tabel gunung es terkelola tidak didukung. TIDAK ADA STATISTIK
Lewati pengumpulan statistik selama proses konversi dan selesaikan konversi lebih cepat. Setelah tabel dikonversi ke Delta Lake, Anda dapat menggunakan
OPTIMIZE ZORDER BY
untuk mengatur ulang tata letak data dan menghasilkan statistik.-
Partisi tabel yang dibuat oleh kolom yang ditentukan. Ketika
table_name
adalah jalur,PARTITIONED BY
diperlukan untuk data yang dipartisi.table_name
Ketika adalah pengidentifikasi tabel yang memenuhi syarat,PARTITIONED BY
klausa bersifat opsional dan spesifikasi partisi dimuat dari metastore. Dalam kedua pendekatan, proses konversi membatalkan dan memberikan pengecualian jika struktur direktori tidak sesuai dengan spesifikasi yang disediakan atau dimuatPARTITIONED BY
.Catatan
Dalam Databricks Runtime 11.1 ke bawah,
PARTITIONED BY
adalah argumen yang diperlukan untuk semua data yang dipartisi.
Contoh
Catatan
Anda tidak perlu memberikan informasi partisi untuk tabel iceberg atau tabel yang terdaftar di metastore.
CONVERT TO DELTA database_name.table_name; -- only for Parquet tables
CONVERT TO DELTA parquet.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`
PARTITIONED BY (date DATE); -- if the table is partitioned
CONVERT TO DELTA iceberg.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`; -- uses Iceberg manifest for metadata
Peringatan
File apa pun yang tidak dilacak oleh Delta Lake tidak terlihat dan dapat dihapus saat Anda menjalankan VACUUM
. Anda harus menghindari memperbarui atau menambahkan file data selama proses konversi. Setelah tabel dikonversi, pastikan semua penulisan melewati Delta Lake.
Ada kemungkinan bahwa beberapa tabel eksternal berbagi direktori Parquet yang mendasar yang sama. Dalam hal ini, jika Anda menjalankan CONVERT
salah satu tabel eksternal, maka Anda tidak akan dapat mengakses tabel eksternal lainnya karena direktori yang mendasarinya telah dikonversi dari Parquet ke Delta Lake. Untuk mengkueri atau menulis ke tabel eksternal ini lagi, Anda juga harus menjalankannya CONVERT
.
CONVERT
mengisi informasi katalog, seperti skema dan properti tabel, ke log transaksi Delta Lake. Jika direktori yang mendasarinya telah dikonversi ke Delta Lake dan metadatanya berbeda dari metadata katalog, convertMetastoreMetadataMismatchException
akan dilemparkan.
Saat menggunakan Databricks Runtime, jika Anda ingin CONVERT
menimpa metadata yang ada di log transaksi Delta Lake, atur konfigurasi spark.databricks.delta.convert.metadataCheck.enabled
SQL ke false.
Urungkan konversi
Jika Anda telah melakukan operasi Delta Lake seperti DELETE
atau OPTIMIZE
yang dapat mengubah file data:
- Jalankan perintah berikut untuk pengumpulan sampah:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
<path-to-table>/_delta_log
Hapus direktori.