Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 TABLEpada lokasi eksternal yang memberikan akses keLOCATIONyang diakses oleh tabel eksternal. - Izin
USE CATALOGpada katalog induk tabel. - Izin
USE SCHEMApada skema induk tabel. - Izin
CREATE TABLEpada 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.