Membuat dan mengkueri tabel katalog
Sejauh ini kami telah mempertimbangkan instans tabel Delta Lake yang dibuat dari dataframe dan dimodifikasi melalui API Delta Lake. Anda juga dapat menentukan tabel Delta Lake sebagai tabel katalog di metastore dan bekerja dengannya menggunakan SQL.
Tabel eksternal vs terkelola
Tabel di katalog Spark, termasuk tabel Delta Lake, dapat berupa terkelola atau eksternal; dan penting untuk memahami perbedaan antara tabel semacam ini.
- Tabel terkelola ditentukan tanpa lokasi tertentu, dan file data disimpan dalam penyimpanan yang digunakan oleh metastore. Menghilangkan tabel tidak hanya menghapus metadatanya dari katalog, tetapi juga menghapus folder tempat file datanya disimpan.
- Tabel eksternal ditentukan untuk lokasi file kustom, tempat data untuk tabel disimpan. Metadata untuk tabel ditentukan dalam katalog Spark. Menghapus tabel akan menghapus metadata dari katalog, tetapi tidak memengaruhi file data.
Membuat tabel katalog
Ada beberapa cara untuk membuat tabel katalog.
Membuat tabel katalog dari dataframe
Anda dapat membuat tabel terkelola dengan menulis dataframe menggunakan operasi saveAsTable
seperti yang diperlihatkan dalam contoh berikut:
# Save a dataframe as a managed table
df.write.format("delta").saveAsTable("MyManagedTable")
## specify a path option to save as an external table
df.write.format("delta").option("path", "/mydata").saveAsTable("MyExternalTable")
Membuat tabel katalog menggunakan SQL
Anda juga dapat membuat tabel katalog dengan menggunakan pernyataan SQL CREATE TABLE
dengan klausul USING DELTA
, dan parameter LOCATION
opsional untuk tabel eksternal. Anda dapat menjalankan pernyataan menggunakan API SparkSQL, seperti contoh berikut:
spark.sql("CREATE TABLE MyExternalTable USING DELTA LOCATION '/mydata'")
Atau Anda dapat menggunakan dukungan SQL asli di Spark untuk menjalankan pernyataan:
%sql
CREATE TABLE MyExternalTable
USING DELTA
LOCATION '/mydata'
Tip
Pernyataan CREATE TABLE
menampilkan kesalahan jika tabel dengan nama yang ditentukan sudah ada di katalog. Untuk mengurangi perilaku ini, Anda dapat menggunakan pernyataan CREATE TABLE IF NOT EXISTS
atau pernyataan CREATE OR REPLACE TABLE
.
Menentukan skema tabel
Dari semua contoh sejauh ini, tabel dibuat tanpa skema eksplisit. Dalam kasus tabel yang dibuat dengan menulis dataframe, skema tabel diwarisi dari dataframe. Saat membuat tabel eksternal, skema diwarisi dari file apa pun yang saat ini disimpan di lokasi tabel. Namun, saat membuat tabel terkelola baru, atau tabel eksternal dengan lokasi yang saat ini kosong, Anda menentukan skema tabel dengan menentukan nama kolom, jenis, dan nullability sebagai bagian dari pernyataan CREATE TABLE; seperti yang ditunjukkan dalam contoh berikut:
%sql
CREATE TABLE ManagedSalesOrders
(
Orderid INT NOT NULL,
OrderDate TIMESTAMP NOT NULL,
CustomerName STRING,
SalesTotal FLOAT NOT NULL
)
USING DELTA
Saat menggunakan Delta Lake, skema tabel diberlakukan - semua sisipan dan pembaruan harus mematuhi nullability kolom dan jenis data yang ditentukan.
Menggunakan DeltaTableBuilder API
Anda dapat menggunakan API DeltaTableBuilder (bagian dari API Delta Lake) untuk membuat tabel katalog, seperti yang ditunjukkan dalam contoh berikut:
from delta.tables import *
DeltaTable.create(spark) \
.tableName("default.ManagedProducts") \
.addColumn("Productid", "INT") \
.addColumn("ProductName", "STRING") \
.addColumn("Category", "STRING") \
.addColumn("Price", "FLOAT") \
.execute()
Demikian pula dengan pernyataan SQL CREATE TABLE
, metode create
mengembalikan kesalahan jika tabel dengan nama yang ditentukan sudah ada. Anda dapat mengurangi perilaku ini dengan menggunakan metode createIfNotExists
atau createOrReplace
.
Menggunakan tabel katalog
Anda bisa menggunakan tabel katalog seperti tabel dalam database hubungan berbasis SQL apa pun, mengkueri dan memanipulasinya dengan menggunakan pernyataan SQL standar. Misalnya, contoh kode berikut menggunakan pernyataan SELECT
untuk mengkueri tabel ManagedSalesOrders:
%sql
SELECT orderid, salestotal
FROM ManagedSalesOrders
Tip
Untuk mengetahui informasi selengkapnya tentang bekerja dengan Delta Lake, lihat Pembacaan dan penulisan batch tabel dalam dokumentasi Delta Lake.