KONVERSI KE DELTA

Berlaku untuk:check ditandai ya pemeriksaan Databricks SQL ditandai ya 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

  • table_name

    Pengidentifikasi tabel yang memenuhi syarat secara opsional atau jalur ke parquet direktori file atau iceberg . 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.

  • DIPARTISI OLEH

    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 dimuat PARTITIONED 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:

  1. Jalankan perintah berikut untuk pengumpulan sampah:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. <path-to-table>/_delta_log Hapus direktori.