Tabel terkelola Unity Catalog untuk Delta Lake dan Apache Iceberg

Tabel terkelola Unity Catalog adalah jenis tabel default dan direkomendasikan di Azure Databricks untuk Delta Lake dan Apache Iceberg. Unity Catalog mengelola semua tanggung jawab baca, tulis, penyimpanan, dan pengoptimalan. Lihat Mengonversi tabel Delta Lake eksternal atau asing ke tabel terkelola Unity Catalog.

File data untuk tabel terkelola disimpan dalam skema atau katalog yang berisinya. Lihat Menentukan lokasi penyimpanan terkelola di Unity Catalog.

Databricks merekomendasikan penggunaan tabel terkelola untuk memanfaatkan manfaat berikut, dibandingkan dengan tabel eksternal dan asing:

  • Mengurangi biaya penyimpanan dan komputasi.
  • Performa kueri yang lebih cepat di semua jenis klien.
  • Pemeliharaan dan pengoptimalan tabel otomatis.
  • Akses aman untuk klien eksternal melalui API terbuka.
  • Dukungan untuk format Delta Lake dan Apache Iceberg.
  • Peningkatan otomatis ke fitur platform terbaru.

Anda dapat bekerja dengan tabel terkelola di semua bahasa dan produk yang didukung di Azure Databricks. Anda memerlukan hak istimewa tertentu untuk membuat, memperbarui, menghapus, atau mengkueri tabel terkelola. Lihat Kelola hak akses di Unity Catalog.

Note

Halaman ini hanya menjelaskan tabel terkelola Katalog Unity. Untuk tabel terkelola di metastore Apache Hive warisan, lihat Objek database di metastore Apache Hive warisan.

Manfaat tabel terkelola Unity Catalog

Tabel terkelola Unity Catalog mengoptimalkan biaya penyimpanan dan kecepatan kueri, dan memungkinkan interoperabilitas dengan alat pihak ketiga untuk Delta Lake dan Apache Iceberg. Untuk menyederhanakan manajemen dan performa data, tabel terkelola ini menggunakan teknologi yang didukung AI, seperti pemadatan ukuran file dan pengumpulan statistik cerdas.

Tabel terkelola mendukung interoperabilitas dengan mengizinkan akses dari klien Delta Lake dan Apache Iceberg. Lihat Mengakses data Databricks dengan menggunakan sistem eksternal.

Fitur berikut ini unik untuk tabel terkelola Unity Catalog, dan tidak tersedia untuk tabel eksternal dan tabel asing:

Feature Benefits Konfigurasi
Penerapan katalog Memungkinkan transaksi multistatement lintas tabel, perencanaan kueri yang lebih cepat dengan menyajikan metadata secara langsung dari Unity Catalog, perubahan skema dan batasan yang dapat diterapkan, serta operasi tulis yang aman dari mesin eksternal. Dinonaktifkan secara default.
Untuk mengaktifkannya, atur properti tabel delta.feature.catalogManaged. Lihat Aktifkan komit katalog.
Pengoptimalan prediktif Mengoptimalkan tata letak dan komputasi data Anda secara otomatis menggunakan AI, tanpa memerlukan operasi pemeliharaan manual. Databricks merekomendasikan untuk mengaktifkan pengoptimalan prediktif untuk semua tabel terkelola untuk mengurangi biaya penyimpanan dan komputasi.
Menjalankan secara otomatis:
Diaktifkan secara default untuk semua akun baru yang dibuat pada atau setelah 11 November 2024. Untuk akun saat ini, Azure Databricks secara bertahap mengaktifkan pengoptimalan prediktif secara default. Lihat Memverifikasi apakah pengoptimalan prediktif diaktifkan.
Untuk mengonfigurasi, lihat Mengaktifkan pengoptimalan prediktif.
Transaksi multi-pernyataan Memungkinkan Anda menjalankan beberapa pernyataan SQL pada satu atau beberapa tabel sebagai satu commit atomik, dengan jaminan ACID. Semua perubahan berhasil bersama-sama atau digulung balik bersama-sama. Gunakan untuk prosedur tersimpan dan pembuatan skrip SQL dalam beban kerja pergudangan misi penting.
Transaksi yang menulis ke tabel Apache Iceberg terkelola ada di Pratinjau Privat.
Dinonaktifkan secara default.
Gunakan BEGIN ATOMIC ... END; untuk transaksi non-interaktif atau BEGIN TRANSACTION; ... COMMIT; untuk transaksi interaktif. Lihat Mode transaksi.
Pengklusteran cairan otomatis Untuk tabel dengan pengoptimalan prediktif, pengklusteran cairan dengan cerdas memilih kunci pengklusteran dan secara otomatis memperbaruinya saat pola kueri berubah untuk meningkatkan performa dan menurunkan biaya. Dinonaktifkan secara default.
Untuk mengonfigurasi, lihat Mengaktifkan pengklusteran cairan.
Penembolokan metadata Caching dalam memori metadata transaksi meningkatkan kinerja kueri dengan meminimalkan permintaan ke log transaksi yang disimpan di cloud. Diaktifkan secara default. Tidak dapat dikonfigurasi.
Indeks pencarian teks lengkap Mempercepat pencarian substring dan kata kunci pada kolom teks menggunakan fungsi search dan isearch. Saat indeks berlaku, Azure Databricks melewati file yang tidak dapat berisi baris yang cocok, mengurangi jumlah data yang dipindai.
Di Beta dan memerlukan Databricks Runtime 18.2 ke atas.
Dinonaktifkan secara default.
Buat dengan CREATE SEARCH INDEX.
Penghapusan file otomatis setelah DROP TABLE perintah Jika Anda DROP tabel terkelola, Azure Databricks menghapus file data di penyimpanan cloud setelah periode pemulihan berakhir (default 7 hari), sehingga mengurangi biaya penyimpanan. Untuk tabel eksternal, Anda harus menghapus file secara manual dari wadah penyimpanan Anda. Diaktifkan secara default. Anda dapat mengonfigurasi periode pemulihan di tingkat katalog atau skema. Lihat Menghilangkan tabel terkelola.

Mengakses data Databricks menggunakan sistem eksternal

Tabel terkelola mendukung interoperabilitas dengan mengizinkan akses dari klien Delta Lake dan Apache Iceberg.

Melalui API terbuka dan penyediaan kredensial, Unity Catalog memungkinkan mesin eksternal seperti Trino, DuckDB, Apache Spark, Daft, serta mesin yang terintegrasi dengan katalog REST Iceberg, seperti Dremio, untuk mengakses tabel terkelola. Untuk klien eksternal yang tidak mendukung API terbuka, Anda dapat menggunakan Mode Kompatibilitas untuk membaca tabel terkelola menggunakan klien Delta Lake atau Apache Iceberg apa pun. OpenSharing, protokol sumber terbuka, memungkinkan berbagi data yang aman dan diatur dengan mitra dan platform eksternal.

Lihat integrasi untuk daftar mesin eksternal yang didukung, atau periksa dokumentasi mesin Anda jika tidak disertakan dalam daftar ini.

API terbuka berikut ini memungkinkan sistem eksternal mengakses tabel terkelola Katalog Unity:

  • Unity REST API telah membaca, menulis, dan membuat akses untuk klien Delta Lake ke tabel Delta Lake terkelola.
  • Iceberg REST Catalog (IRC) memiliki akses baca, tulis, dan buat bagi klien Apache Iceberg ke tabel Apache Iceberg terkelola, serta akses baca-saja ke tabel Delta Lake dengan pembacaan Apache Iceberg yang diaktifkan (UniForm).

Kedua API mendukung penyediaan kredensial, yang menyediakan kredensial sementara yang memiliki cakupan spesifik dan mewarisi hak istimewa dari prinsipal Azure Databricks yang meminta, mempertahankan kontrol tata kelola serta keamanan.

OpenSharing adalah protokol sumber terbuka yang memungkinkan akses data yang aman dan diatur ke mitra dan platform eksternal. Anda dapat menggunakan OpenSharing untuk memberi mitra akses baca-saja sementara.

Semua operasi baca dan tulis ke tabel terkelola harus menggunakan nama tabel dan nama katalog serta skema jika ada. Contohnya, catalog_name.schema_name.table_name. Akses berbasis jalur ke tabel terkelola Unity Catalog tidak didukung (kecuali dalam Mode Kompatibilitas) karena melewati kontrol akses Katalog Unity dan mencegah fitur tabel terkelola berfungsi dengan baik.

Membuat tabel terkelola

Untuk membuat tabel terkelola, Anda harus memiliki:

  • USE SCHEMA pada skema induk tabel.
  • USE CATALOG pada katalog induk tabel.
  • CREATE TABLE pada skema induk tabel.

Gunakan sintaks berikut untuk membuat tabel terkelola kosong. Ganti nilai placeholder ini:

  • <catalog-name>: Nama katalog yang akan berisi tabel.
  • <schema-name>: Nama skema yang berisi tabel.
  • <table-name>: Nama untuk tabel.
  • <column-specification>: Nama dan jenis data setiap kolom.

SQL

-- Create a managed Delta table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
);

-- Create a managed Iceberg table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
)
USING iceberg;

Python

Buat tabel Delta Lake terkelola menggunakan saveAsTable():

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

Atau, gunakan DeltaTableBuilder API untuk opsi khusus Delta seperti kolom yang dihasilkan dan properti tabel:

from delta.tables import DeltaTable

DeltaTable.create(spark) \
  .tableName("<catalog-name>.<schema-name>.<table-name>") \
  .addColumn("<column-name>", "<data-type>") \
  .property("<key>", "<value>") \
  .execute()

Buat tabel Apache Iceberg terkelola:

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .format("iceberg") \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

Untuk mempertahankan performa pada baca dan tulis, Azure Databricks secara berkala menjalankan operasi untuk mengoptimalkan metadata tabel Apache Iceberg terkelola. Tugas ini dilakukan menggunakan komputasi tanpa server, yang memiliki MODIFY izin pada tabel Apache Iceberg. Operasi ini hanya menulis ke metadata tabel, dan komputasi hanya mempertahankan izin ke tabel selama durasi pekerjaan.

Note

Untuk membuat tabel Apache Iceberg, tentukan USING icebergsecara eksplisit . Jika tidak, Azure Databricks membuat tabel Delta Lake secara default.

Anda dapat membuat tabel terkelola dari hasil kueri atau operasi penulisan DataFrame. Artikel berikut menunjukkan beberapa pola yang dapat Anda gunakan untuk membuat tabel terkelola di Azure Databricks:

Untuk membuat salinan tabel terkelola yang sudah ada, gunakan kloning. Tabel Delta Lake terkelola mendukung kloning penuh dan kloning dangkal. Tabel Apache Iceberg terkelola hanya mendukung kloning mendalam. Lihat Mengkloning tabel di Azure Databricks dan Mengkloning tabel Iceberg terkelola.

Hapus tabel terkelola

Untuk menghapus tabel terkelola, Anda harus memiliki:

  • MANAGE pada tabel atau Anda harus menjadi pemilik tabel.
  • USE SCHEMA pada skema induk tabel.
  • USE CATALOG pada katalog induk tabel.

Untuk menghilangkan tabel terkelola, jalankan perintah berikut:

SQL

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Python

spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")

Atau, dalam Databricks Runtime 18.2 ke atas, gunakan spark.catalog.dropTable():

spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)

Katalog Unity mendukung perintah UNDROP TABLE untuk memulihkan tabel terkelola yang tidak sengaja dihapus. Secara default, tabel dapat dipulihkan selama 7 hari setelah dihilangkan. Setelah periode pemulihan berakhir, Azure Databricks menghapus file data yang mendasar dari penyewa cloud Anda dalam waktu 48 jam.

Mengonfigurasi periode pemulihan

Important

Periode pemulihan yang dapat dikonfigurasi ada di Pratinjau Umum.

Anda dapat mengonfigurasi berapa lama tabel terkelola yang dihilangkan tetap dapat dipulihkan di tingkat katalog atau skema. Jika periode pemulihan diatur di kedua tingkat, pengaturan tingkat skema lebih diutamakan untuk tabel dalam skema tersebut.

Untuk mengonfigurasi periode pemulihan, Anda harus memiliki MANAGE hak istimewa atau kepemilikan pada katalog atau skema. Pengaturan ini hanya berlaku untuk tabel yang dihilangkan setelah dikonfigurasi. Ini tidak memengaruhi tabel yang sudah dihilangkan.

Periode pemulihan dapat diatur ke 0 jam (untuk menonaktifkan pemulihan) atau antara 7–30 hari, inklusif. Periode pemulihan yang lebih lama (hingga 30 hari) memberikan perlindungan tambahan terhadap penurunan data produksi penting yang tidak disengaja. Periode pemulihan yang lebih pendek, atau mengaturnya ke 0, menyebabkan data yang dihilangkan dihapus lebih cepat — berguna untuk penghematan biaya dalam beban kerja yang sering membuat dan menghilangkan tabel sebagai bagian dari alur ETL. Mengatur periode pemulihan ke 0 berarti tabel yang dihilangkan tidak dapat dipulihkan menggunakan UNDROP. File data dihapus dari penyimpanan cloud dalam 48 jam setelah tabel dihapus.

Untuk mengatur periode pemulihan, gunakan ALTER CATALOG atau ALTER SCHEMA dengan RETAIN DROPPED TO klausa:

SQL

-- Set a 30-day recovery period on a catalog
ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS;

-- Set a 7-day recovery period on a schema (overrides the catalog setting)
ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS;

Python

spark.sql("ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS")
spark.sql("ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS")

Anda juga dapat mengatur periode pemulihan saat membuat katalog atau skema dengan RETAIN DROPPED FOR klausa:

SQL

CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS;
CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS;

Python

spark.sql("CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS")
spark.sql("CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS")

Untuk memeriksa periode pemulihan saat ini, jalankan DESCRIBE EXTENDED. Keluaran mencakup baris Recovery Period Hours:

SQL

DESCRIBE CATALOG EXTENDED my_catalog;
DESCRIBE SCHEMA EXTENDED my_catalog.my_schema;

Python

spark.sql("DESCRIBE CATALOG EXTENDED my_catalog").show()
spark.sql("DESCRIBE SCHEMA EXTENDED my_catalog.my_schema").show()