Membuat dan mengkueri tabel katalog

Selesai

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.