Bekerja dengan tabel eksternal

Di Unity Catalog, tabel eksternal menyimpan file datanya di penyimpanan objek cloud dalam tenant cloud Anda. Katalog Unity terus mengelola metadata tabel, memastikan tata kelola data penuh di semua kueri. Namun, ini tidak mengelola siklus hidup, pengoptimalan, lokasi penyimpanan, atau tata letak data.

Saat Anda menentukan tabel eksternal Unity Catalog, Anda harus menentukan lokasi penyimpanan. Lokasi ini adalah lokasi eksternal yang terdaftar di Unity Catalog. Saat Anda menghapus tabel eksternal, Katalog Unity menghapus metadata tabel tetapi tidak menghapus file data yang mendasar.

Halaman ini berfokus pada tabel eksternal Unity Catalog. Tabel eksternal dalam metastore Apache Hive lama memiliki perilaku yang berbeda. Lihat Objek database di metastore Hive versi lama.

Kapan menggunakan tabel eksternal

Databricks merekomendasikan penggunaan tabel eksternal untuk kasus penggunaan berikut:

  • Anda perlu mendaftarkan tabel yang berbasis pada data yang sudah ada dan tidak kompatibel dengan tabel terkelola Unity Catalog, seperti JSON atau Avro. Lihat Format file untuk tabel eksternal.
  • Anda memerlukan akses langsung ke data dari klien non-Databricks yang tidak mendukung pola akses eksternal lainnya. Hak istimewa Unity Catalog tidak diberlakukan saat pengguna mengakses file data dari sistem eksternal. Lihat Mengakses data Databricks dengan menggunakan sistem eksternal.

Dalam kebanyakan kasus, Databricks merekomendasikan penggunaan tabel terkelola Unity Catalog untuk memanfaatkan pengoptimalan tabel otomatis, performa kueri yang lebih cepat, dan mengurangi biaya. Untuk memigrasikan tabel eksternal ke tabel terkelola, lihat Mengonversi tabel Delta Lake eksternal atau asing ke tabel terkelola Katalog Unity.

Penting

Jika Anda memperbarui metadata tabel eksternal menggunakan klien non-Databricks atau menggunakan akses berbasis jalur dari dalam Databricks, metadata tersebut tidak secara otomatis menyinkronkan status dengan Unity Catalog. Databricks merekomendasikan untuk menghindari pembaruan metadata tersebut, tetapi jika Anda melakukannya, Anda harus menjalankan MSCK REPAIR TABLE <table-name> SYNC METADATA untuk memperbarui skema di Katalog Unity. Lihat REPAIR TABLE.

Format file untuk tabel eksternal

Tabel eksternal dapat menggunakan format file berikut:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • Parquet
  • Ork
  • TEKS

Membuat tabel eksternal

Anda dapat membuat tabel eksternal menggunakan perintah SQL atau operasi penulisan DataFrame.

Sebelum Anda memulai

Sebelum membuat tabel eksternal, Anda harus terlebih dahulu mengonfigurasi lokasi eksternal yang memberikan akses ke penyimpanan cloud Anda.

Untuk informasi selengkapnya tentang mengonfigurasi lokasi eksternal, lihat Hubungkan ke lokasi eksternal Azure Data Lake Storage Gen2 (ADLS Gen2).

Untuk membuat tabel eksternal, Anda harus memenuhi persyaratan izin berikut:

  • Hak istimewa CREATE EXTERNAL TABLE pada lokasi eksternal yang memberikan akses ke LOCATION yang diakses oleh tabel eksternal.
  • Izin USE CATALOG pada katalog induk tabel.
  • Izin USE SCHEMA pada skema induk tabel.
  • Izin CREATE TABLE pada skema induk tabel.

Nota

Saat lokasi eksternal S3 dikaitkan dengan beberapa metastores, hindari memberikan akses tulis ke tabel yang menggunakan lokasi S3 tersebut karena menulis dari metastores yang berbeda ke tabel eksternal yang sama dapat menyebabkan masalah konsistensi. Namun, membaca dari lokasi eksternal S3 yang sama di beberapa metastores aman.

Contoh

Gunakan salah satu contoh berikut dalam buku catatan atau editor kueri SQL untuk membuat tabel eksternal.

Dalam contoh berikut ini, ganti nilai placeholder:

  • <catalog>: Nama katalog yang akan berisi tabel.
  • <schema>: Nama skema yang akan berisi tabel.
  • <table-name>: Nama untuk tabel.
  • <column-name> dan <data-type>: Nama dan jenis data untuk setiap kolom.
  • <bucket-path>: Jalur ke wadah penyimpanan cloud tempat tabel akan dibuat.
  • <table-directory>: Direktori tempat tabel akan dibuat. Gunakan direktori unik untuk setiap tabel.
  • <source-table>: Tabel yang akan digunakan sebagai sumber data saat membuat tabel dari hasil kueri.

SQL

Untuk membuat tabel eksternal di ADLS Gen2 dengan skema yang ditentukan, jalankan yang berikut ini:

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-name> <data-type>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

Untuk membuat tabel eksternal di ADLS Gen2 dari hasil kueri, jalankan yang berikut ini:

CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 'abfss://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;

Untuk membuat tabel eksternal di S3 dengan skema yang ditentukan, jalankan yang berikut ini:

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-name> <data-type>
)
LOCATION 's3://<bucket-path>/<table-directory>';

Untuk membuat tabel eksternal di S3 dari hasil kueri, jalankan yang berikut ini:

CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 's3://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;

Python

Untuk membuat tabel eksternal di ADLS Gen2 dengan skema yang ditentukan, jalankan yang berikut ini:

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

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

spark.createDataFrame([], schema).write \
  .option("path", "abfss://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Untuk membuat tabel eksternal di ADLS Gen2 dari DataFrame, jalankan yang berikut ini:

df.write \
  .option("path", "abfss://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Untuk membuat tabel eksternal di S3 dengan skema yang ditentukan, jalankan yang berikut ini:

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

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

spark.createDataFrame([], schema).write \
  .option("path", "s3://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Untuk membuat tabel eksternal di S3 dari DataFrame, jalankan yang berikut ini:

df.write \
  .option("path", "s3://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Untuk informasi selengkapnya tentang parameter pembuatan tabel, lihat CREATE TABLE.

Opsi sintaks SQL berikut berfungsi dengan operasi DataFrame:

Menghapus tabel eksternal

Untuk menghapus tabel, Anda harus menjadi pemiliknya atau memiliki hak istimewa MANAGE pada tabel. Untuk menghilangkan tabel eksternal, 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 tidak menghapus data yang mendasar di penyimpanan cloud saat Anda menghilangkan tabel eksternal. Anda harus langsung menghapus file data yang mendasar jika Anda perlu menghapus data yang terkait dengan tabel.

Contoh buku catatan: Membuat tabel eksternal

Anda bisa menggunakan contoh buku catatan berikut untuk membuat katalog, skema, dan tabel eksternal, dan untuk mengelola izin pada buku catatan tersebut.

Membuat dan mengelola tabel eksternal dalam Notebook Katalog Unity

Dapatkan buku catatan