Bagikan melalui


Menghilangkan atau mengganti tabel

Azure Databricks mendukung perintah DDL standar SQL untuk menghilangkan dan mengganti tabel yang terdaftar dengan Unity Catalog atau metastore Apache Hive. Artikel ini menyediakan contoh penghapusan dan penggantian tabel serta rekomendasi untuk sintaks tergantung pada lingkungan yang dikonfigurasi dan hasil yang diinginkan.

Kapan harus menjatuhkan tabel

Anda harus menggunakan DROP TABLE untuk menghapus tabel dari metastore saat Anda ingin menghapus tabel secara permanen dan tidak berniat membuat tabel baru di lokasi yang sama. Contohnya:

DROP TABLE table_name

DROP TABLE memiliki semantik yang berbeda tergantung pada jenis tabel dan apakah tabel terdaftar ke Unity Catalog atau metastore Apache Hive warisan.

Jenis tabel Metastore Perilaku
Terkelola Katalog Unity Tabel dihapus dari metastore dan data yang mendasar ditandai untuk dihapus. Anda dapat UNDROP data dalam tabel terkelola Katalog Unity selama 7 hari.
Terkelola Sarang Tabel dihapus dari metastore dan data yang mendasar dihapus.
Eksternal Katalog Unity Tabel dihapus dari metastore tetapi data yang mendasar tetap ada. Hak istimewa akses URI sekarang diatur oleh lokasi eksternal yang berisi data.
Eksternal Sarang Tabel dihapus dari metastore tetapi data yang mendasar tetap ada. Setiap hak istimewa akses URI tidak berubah.

DROP TABLE semantik berbeda di seluruh jenis tabel, dan Katalog Unity mempertahankan riwayat tabel menggunakan ID tabel internal. Namun, semua tabel berbagi hasil umum bahwa setelah operasi selesai, nama tabel yang didaftarkan sebelumnya tidak lagi memiliki tautan aktif ke riwayat data dan tabel dari metastore.

Lihat DROP TABLE.

Catatan

Databricks tidak merekomendasikan pola penurunan dan kemudian membuat ulang tabel menggunakan nama yang sama untuk alur atau sistem produksi, karena pola ini dapat mengakibatkan hasil yang tidak terduga untuk operasi bersamaan. Lihat Mengganti data dengan operasi bersamaan.

Kapan harus mengganti tabel

Databricks merekomendasikan penggunaan CREATE OR REPLACE TABLE pernyataan untuk kasus penggunaan di mana Anda ingin sepenuhnya menimpa tabel target dengan data baru. Misalnya, untuk menimpa tabel dengan semua data dari direktori Parquet, Anda bisa menjalankan perintah berikut:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

Penting

CREATE OR REPLACE TABLE tidak didukung untuk tabel Iceberg yang dikelola oleh Unity Catalog. Gunakan perintah terpisah DROP TABLE dan CREATE TABLE sebagai gantinya.

CREATE OR REPLACE TABLE memiliki semantik yang sama terlepas dari jenis tabel atau metastore yang digunakan. Berikut ini adalah keuntungan penting dari CREATE OR REPLACE TABLE:

  • Konten tabel diganti, tetapi identitas tabel dipertahankan.
  • Riwayat tabel dipertahankan, dan Anda dapat mengembalikan tabel ke versi yang lebih lama dengan RESTORE perintah .
  • Operasi ini adalah satu transaksi, jadi tidak pernah ada waktu ketika tabel tidak ada.
  • Pembacaan kueri bersamaan dari tabel dapat dilanjutkan tanpa gangguan. Karena versi sebelum dan sesudah penggantian masih ada dalam riwayat tabel, kueri bersamaan dapat mereferensikan salah satu versi tabel seperlunya.
  • Jika tabel asli menyertakan masker kolom, masker tersebut dipertahankan untuk kolom apa pun yang masih ada di tabel baru. Ini memastikan bahwa kebijakan akses data dipertahankan.

Lihat CREATE TABLE [MENGGUNAKAN].

Mengganti data dengan operasi bersamaan

Setiap kali Anda ingin melakukan penggantian penuh data dalam tabel yang mungkin digunakan dalam operasi bersamaan, Anda harus menggunakan CREATE OR REPLACE TABLE.

Anti-pola berikut tidak boleh digunakan:

-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;

CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;

Alasan rekomendasi ini bervariasi tergantung pada apakah Anda menggunakan tabel terkelola atau eksternal dan apakah Anda menggunakan Katalog Unity, tetapi di semua jenis tabel menggunakan pola ini dapat mengakibatkan kesalahan, rekaman yang dihilangkan, atau hasil yang rusak.

Sebagai gantinya, Databricks merekomendasikan selalu menggunakan CREATE OR REPLACE TABLE, seperti dalam contoh berikut:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

Karena riwayat tabel dipertahankan selama penggantian data atomik, transaksi bersamaan dapat memvalidasi versi tabel sumber yang direferensikan, dan oleh karena itu gagal atau rekonsiliasi transaksi bersamaan seperlunya tanpa memperkenalkan perilaku atau hasil yang tidak terduga.