Referensi bahasa Delta Live Tables SQL
Artikel ini memiliki detail untuk antarmuka pemrograman SQL Tabel Langsung Delta.
- Untuk informasi tentang API Python, lihat referensi bahasa Delta Live Tables Python.
- Untuk informasi selengkapnya tentang perintah SQL, lihat Referensi bahasa SQL.
Anda dapat menggunakan fungsi yang ditentukan pengguna (UDF) Python dalam kueri SQL Anda, tetapi Anda harus menentukan UDF ini dalam file Python sebelum memanggilnya dalam file sumber SQL. Lihat Fungsi skalar yang ditentukan pengguna - Python.
Batasan
klausul PIVOT
tidak didukung. pivot
Operasi di Spark memerlukan pemuatan data input yang bersemangat untuk menghitung skema output. Kemampuan ini tidak didukung dalam Tabel Langsung Delta.
Membuat tampilan terwujud atau tabel streaming Tabel Langsung Delta
Catatan
CREATE OR REFRESH LIVE TABLE
Sintaks untuk membuat tampilan materialisasi tidak digunakan lagi. Sebagai gantinya, gunakanCREATE OR REFRESH MATERIALIZED VIEW
.- Untuk menggunakan
CLUSTER BY
klausul untuk mengaktifkan pengklusteran cairan, alur Anda harus dikonfigurasi untuk menggunakan saluran pratinjau.
Anda menggunakan sintaks SQL dasar yang sama saat mendeklarasikan tabel streaming atau tampilan materialisasi.
Mendeklarasikan tampilan terwujud Tabel Langsung Delta dengan SQL
Berikut ini menguraikan sintaks untuk mendeklarasikan tampilan materialisasi dalam Tabel Langsung Delta dengan SQL:
CREATE OR REFRESH MATERIALIZED VIEW view_name [CLUSTER BY (col_name1, col_name2, ... )]
[(
[
col_name1 col_type1 [ GENERATED ALWAYS AS generation_expression1 ] [ COMMENT col_comment1 ] [ column_constraint ] [ MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ] ],
col_name2 col_type2 [ GENERATED ALWAYS AS generation_expression2 ] [ COMMENT col_comment2 ] [ column_constraint ] [ MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ] ],
...
]
[
CONSTRAINT expectation_name_1 EXPECT (expectation_expr1) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
CONSTRAINT expectation_name_2 EXPECT (expectation_expr2) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
...
]
[ table_constraint ] [, ...]
)]
[USING DELTA]
[PARTITIONED BY (col_name1, col_name2, ... )]
[LOCATION path]
[COMMENT table_comment]
[TBLPROPERTIES (key1 [ = ] val1, key2 [ = ] val2, ... )]
[ WITH { ROW FILTER func_name ON ( [ column_name | constant_literal [, ...] ] ) [...] } ]
AS select_statement
Mendeklarasikan tabel streaming Delta Live Tables dengan SQL
Anda hanya dapat mendeklarasikan tabel streaming menggunakan kueri yang dibaca terhadap sumber streaming. Databricks merekomendasikan penggunaan Auto Loader untuk streaming penyerapan file dari penyimpanan objek cloud. Lihat Sintaks SQL Auto Loader.
Saat menentukan tabel atau tampilan lain di alur Anda sebagai sumber streaming, Anda harus menyertakan fungsi di STREAM()
sekitar nama himpunan data.
Berikut ini menguraikan sintaks untuk mendeklarasikan tabel Streaming di Tabel Langsung Delta dengan SQL:
CREATE OR REFRESH [TEMPORARY] STREAMING TABLE table_name [CLUSTER BY (col_name1, col_name2, ... )]
[(
[
col_name1 col_type1 [ GENERATED ALWAYS AS generation_expression1 ] [ COMMENT col_comment1 ] [ column_constraint ] [ MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ] ],
col_name2 col_type2 [ GENERATED ALWAYS AS generation_expression2 ] [ COMMENT col_comment2 ] [ column_constraint ] [ MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ] ],
...
]
[
CONSTRAINT expectation_name_1 EXPECT (expectation_expr1) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
CONSTRAINT expectation_name_2 EXPECT (expectation_expr2) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
...
]
[ table_constraint ] [, ...]
)]
[USING DELTA]
[PARTITIONED BY (col_name1, col_name2, ... )]
[LOCATION path]
[COMMENT table_comment]
[TBLPROPERTIES (key1 [ = ] val1, key2 [ = ] val2, ... )]
[ WITH { ROW FILTER func_name ON ( [ column_name | constant_literal [, ...] ] ) [...] } ]
AS select_statement
Membuat tampilan Tabel Langsung Delta
Berikut ini menguraikan sintaks untuk mendeklarasikan tampilan dengan SQL:
CREATE TEMPORARY [STREAMING] LIVE VIEW view_name
[(
[
col_name1 [ COMMENT col_comment1 ],
col_name2 [ COMMENT col_comment2 ],
...
]
[
CONSTRAINT expectation_name_1 EXPECT (expectation_expr1) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
CONSTRAINT expectation_name_2 EXPECT (expectation_expr2) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
...
]
)]
[COMMENT view_comment]
AS select_statement
Sintaks SQL Auto Loader
Berikut ini menjelaskan sintaksis untuk bekerja dengan Auto Loader di SQL:
CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
FROM read_files(
"<file-path>",
"<file-format>",
map(
"<option-key>", "<option_value",
"<option-key>", "<option_value",
...
)
)
Anda dapat menggunakan opsi format yang didukung dengan Auto Loader. Dengan menggunakan fungsi , map()
Anda dapat meneruskan opsi ke read_files()
metode . Opsi adalah pasangan nilai kunci, di mana kunci dan nilai adalah string. Untuk detail tentang format dan opsi dukungan, lihat Opsi format file.
Contoh: Menentukan tabel
Anda dapat membuat himpunan data dengan membaca dari sumber data eksternal atau dari himpunan data yang ditentukan dalam alur. Untuk membaca dari himpunan data internal, tambahkan kata kunci LIVE
ke nama himpunan data: Contoh berikut menetapkan dua himpunan data yang berbeda: tabel bernama taxi_raw
yang menggunakan file JSON sebagai sumber input dan tabel bernama filtered_data
yang menggunakan tampilan taxi_raw
sebagai input:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM json.`/databricks-datasets/nyctaxi/sample/json/`
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
...
FROM LIVE.taxi_raw
Contoh: Membaca dari sumber streaming
Untuk membaca data dari sumber streaming, misalnya, Auto Loader atau himpunan data internal, tentukan STREAMING
tabel:
CREATE OR REFRESH STREAMING TABLE customers_bronze
AS SELECT * FROM read_files("/databricks-datasets/retail-org/customers/", "csv")
CREATE OR REFRESH STREAMING TABLE customers_silver
AS SELECT * FROM STREAM(LIVE.customers_bronze)
Untuk informasi selengkapnya tentang data streaming, lihat Mengubah data dengan Tabel Langsung Delta.
Mengontrol bagaimana tabel diwujudkan
Tabel juga menawarkan kontrol tambahan atas materialisasinya:
- Tentukan bagaimana tabel dipartisi menggunakan
PARTITIONED BY
. Anda dapat menggunakan partisi untuk mempercepat kueri. - Anda dapat mengatur properti tabel menggunakan
TBLPROPERTIES
. Lihat Properti tabel Tabel Langsung Delta. - Atur lokasi penyimpanan menggunakan pengaturan
LOCATION
. Secara default, data tabel disimpan di lokasi penyimpanan alur jikaLOCATION
tidak diatur. - Anda dapat menggunakan kolom yang dihasilkan dalam definisi skema Anda. Lihat Contoh: Menentukan skema dan kolom partisi.
Catatan
Untuk tabel berukuran kurang dari 1 TB, Databricks merekomendasikan untuk mengizinkan Delta Live Table mengontrol organisasi data. Kecuali Anda mengharapkan tabel Anda tumbuh di luar terabyte, Databricks menyarankan agar Anda tidak menentukan kolom partisi.
Contoh: Tentukan skema dan kolom partisi
Anda dapat secara opsional menentukan skema saat menentukan tabel. Contoh berikut menentukan skema untuk tabel target, termasuk menggunakan kolom yang dihasilkan Delta Lake dan menentukan kolom partisi untuk tabel:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
Secara default, Delta Live Tables menyimpulkan skema dari definisi table
jika Anda tidak menentukan skema.
Contoh: Menentukan batasan tabel
Catatan
Dukungan Tabel Langsung Delta untuk batasan tabel ada di Pratinjau Umum. Untuk menentukan batasan tabel, alur Anda harus berupa alur yang mendukung Katalog Unity dan dikonfigurasi untuk menggunakan preview
saluran.
Saat menentukan skema, Anda dapat menentukan kunci primer dan asing. Batasan bersifat informasi dan tidak diberlakukan. Lihat klausa CONSTRAINT dalam referensi bahasa SQL.
Contoh berikut mendefinisikan tabel dengan batasan kunci primer dan asing:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
Membuat parameter nilai yang digunakan saat mendeklarasikan tabel atau tampilan dengan SQL
Gunakan SET
untuk menentukan nilai konfigurasi dalam kueri yang mendeklarasikan tabel atau tampilan, termasuk konfigurasi Spark. Tabel atau tampilan apa pun yang Anda tentukan di buku catatan setelah SET
pernyataan memiliki akses ke nilai yang ditentukan. Konfigurasi Spark apa pun yang ditentukan menggunakan SET
pernyataan digunakan saat menjalankan kueri Spark untuk tabel atau tampilan apa pun setelah pernyataan SET. Untuk membaca nilai konfigurasi dalam kueri, gunakan sintaks interpolasi untai (karakter)${}
. Contoh berikut menetapkan nilai konfigurasi Spark yang diberi nama startDate
dan menggunakan nilai tersebut dalam kueri:
SET startDate='2020-01-01';
CREATE OR REFRESH MATERIALIZED VIEW filtered
AS SELECT * FROM src
WHERE date > ${startDate}
Untuk menentukan beberapa nilai konfigurasi, gunakan pernyataan terpisah SET
untuk setiap nilai.
Contoh: Menentukan filter baris dan masker kolom
Penting
Filter baris dan masker kolom berada di Pratinjau Umum.
Untuk membuat tampilan materialisasi atau Tabel streaming dengan filter baris dan masker kolom, gunakan klausa FILTER ROW dan klausa MASK. Contoh berikut menunjukkan cara menentukan tampilan materialisasi dan tabel Streaming dengan filter baris dan masker kolom:
CREATE OR REFRESH STREAMING TABLE customers_silver (
id int COMMENT 'This is the customer ID',
name string,
region string,
ssn string MASK catalog.schema.ssn_mask_fn COMMENT 'SSN masked for privacy'
)
WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
AS SELECT * FROM STREAM(LIVE.customers_bronze)
CREATE OR REFRESH MATERIALIZED VIEW sales (
customer_id STRING MASK catalog.schema.customer_id_mask_fn,
customer_name STRING,
number_of_line_items STRING COMMENT 'Number of items in the order',
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM LIVE.sales_bronze
Untuk informasi selengkapnya tentang filter baris dan masker kolom, lihat Menerbitkan tabel dengan filter baris dan masker kolom.
Properti SQL
Catatan
Untuk menggunakan CLUSTER BY
klausul untuk mengaktifkan pengklusteran cairan, alur Anda harus dikonfigurasi untuk menggunakan saluran pratinjau.
BUAT TABEL atau LIHAT |
---|
TEMPORARY Buat tabel tetapi jangan terbitkan metadata untuk tabel. Klausa TEMPORARY menginstruksikan Tabel Langsung Delta untuk membuat tabel yang tersedia untuk alur tetapi tidak boleh diakses di luar alur. Untuk mengurangi waktu pemrosesan, tabel sementara bertahan selama masa pakai alur yang membuatnya, dan bukan hanya satu pembaruan. |
STREAMING Buat tabel yang membaca himpunan data input sebagai aliran. Himpunan data input harus berupa sumber data streaming, misalnya, Auto Loader atau STREAMING tabel. |
CLUSTER BY Aktifkan pengklusteran cair pada tabel dan tentukan kolom yang akan digunakan sebagai kunci pengklusteran. Lihat Gunakan pengklusteran cair untuk tabel Delta. |
PARTITIONED BY Daftar opsional dari satu atau beberapa kolom yang digunakan untuk mempartisi tabel. |
LOCATION Lokasi penyimpanan opsional untuk data tabel. Jika tidak diatur, sistem akan default ke lokasi penyimpanan alur. |
COMMENT Deskripsi opsional untuk tabel. |
column_constraint Kunci primer informasi opsional atau batasan kunci asing pada kolom. |
MASK clause (Pratinjau Umum)Menambahkan fungsi masker kolom untuk menganonimkan data sensitif. Kueri di masa mendatang untuk kolom tersebut mengembalikan hasil fungsi yang dievaluasi alih-alih nilai asli kolom. Ini berguna untuk kontrol akses terperindas, karena fungsi dapat memeriksa identitas pengguna dan keanggotaan grup untuk memutuskan apakah akan meredakan nilai. Lihat Klausa masker kolom. |
table_constraint Kunci primer informasi opsional atau batasan kunci asing pada tabel. |
TBLPROPERTIES Daftar opsional properti tabel untuk tabel. |
WITH ROW FILTER clause (Pratinjau Umum)Menambahkan fungsi filter baris ke tabel. Kueri di masa mendatang untuk tabel tersebut menerima subset baris yang dievaluasi fungsinya ke TRUE. Ini berguna untuk kontrol akses terperintah, karena memungkinkan fungsi untuk memeriksa identitas dan keanggotaan grup pengguna yang memanggil untuk memutuskan apakah akan memfilter baris tertentu. Lihat klausa FILTER BARIS. |
select_statement Kueri Delta Live Tables yang menentukan himpunan data untuk tabel. |
Klausa BATASAN |
---|
EXPECT expectation_name Tentukan expectation_name batasan kualitas data. ON VIOLATION Jika batasan tidak ditentukan, tambahkan baris yang melanggar batasan ke himpunan data target. |
ON VIOLATION Tindakan opsional yang harus diambil untuk baris yang gagal: - FAIL UPDATE : Segera hentikan eksekusi alur.- DROP ROW : Hilangkan catatan dan lanjutkan pemrosesan. |
Mengubah pengambilan data dengan SQL di Tabel Langsung Delta
APPLY CHANGES INTO
Gunakan pernyataan untuk menggunakan fungsionalitas CDC Delta Live Tables, seperti yang dijelaskan dalam hal berikut:
CREATE OR REFRESH STREAMING TABLE table_name;
APPLY CHANGES INTO LIVE.table_name
FROM source
KEYS (keys)
[IGNORE NULL UPDATES]
[APPLY AS DELETE WHEN condition]
[APPLY AS TRUNCATE WHEN condition]
SEQUENCE BY orderByColumn
[COLUMNS {columnList | * EXCEPT (exceptColumnList)}]
[STORED AS {SCD TYPE 1 | SCD TYPE 2}]
[TRACK HISTORY ON {columnList | * EXCEPT (exceptColumnList)}]
Anda menentukan batasan kualitas data untuk APPLY CHANGES
target menggunakan klausul yang sama CONSTRAINT
dengan non-kueriAPPLY CHANGES
. Lihat Mengelola kualitas data dengan Tabel Langsung Delta.
Catatan
Perilaku default untuk INSERT
dan UPDATE
peristiwa adalah untuk upsert peristiwa CDC dari sumber: memperbarui baris apa pun dalam tabel target yang cocok dengan kunci yang ditentukan atau menyisipkan baris baru saat rekaman yang cocok tidak ada di tabel target. Penanganan untuk DELETE
peristiwa dapat ditentukan dengan kondisi tersebut APPLY AS DELETE WHEN
.
Penting
Anda harus mendeklarasikan tabel streaming target untuk menerapkan perubahan. Anda dapat secara opsional menentukan skema untuk tabel target Anda. Saat menentukan skema tabel target APPLY CHANGES
, Anda juga harus menyertakan kolom __START_AT
dan __END_AT
dengan jenis data yang sama dengan bidang sequence_by
.
Lihat TERAPKAN PERUBAHAN API: Menyederhanakan perubahan pengambilan data dengan Delta Live Tables.
Klausul |
---|
KEYS Kolom atau kombinasi kolom yang secara unik mengidentifikasi baris dalam data sumber. Ini digunakan untuk mengidentifikasi peristiwa CDC mana yang berlaku untuk catatan tertentu dalam tabel target. Untuk menentukan kombinasi kolom, gunakan daftar kolom yang dipisahkan koma. Klausul ini diperlukan. |
IGNORE NULL UPDATES Izinkan menyerap pembaruan yang berisi subset kolom target. Ketika peristiwa CDC cocok dengan baris yang ada dan ABAIKAN PEMBARUAN NULL ditentukan, kolom dengan null akan mempertahankan nilai yang ada di target. Ini juga berlaku untuk kolom bersarang dengan nilai null .Klausa ini opsional. Defaultnya adalah menimpa kolom yang ada dengan null nilai. |
APPLY AS DELETE WHEN Menentukan kapan peristiwa CDC harus diperlakukan sebagai DELETE bukan upsert. Untuk menangani data yang tidak sesuai urutan, baris yang dihapus untuk sementara disimpan sebagai penanda di tabel Delta yang mendasarinya, dan tampilan dibuat di metastore yang menyaring penanda ini. Interval retensi dapat dikonfigurasi denganpipelines.cdc.tombstoneGCThresholdInSeconds properti tabel.Klausa ini opsional. |
APPLY AS TRUNCATE WHEN Menentukan kapan acara CDC harus diperlakukan sebagai tabel lengkap TRUNCATE . Karena klausa ini memicu pemotongan penuh tabel target, klausa ini harus digunakan hanya untuk kasus penggunaan tertentu yang memerlukan fungsionalitas ini.Klausa APPLY AS TRUNCATE WHEN hanya didukung untuk SCD jenis 1. SCD tipe 2 tidak mendukung operasi pemotongan.Klausa ini opsional. |
SEQUENCE BY Nama kolom yang menentukan urutan logis peristiwa CDC dalam data sumber. Delta Live Tables menggunakan pengurutan ini untuk menangani peristiwa perubahan yang tidak sesuai pesanan. Kolom yang ditentukan harus tipe data yang dapat diurutkan. Klausul ini diperlukan. |
COLUMNS Menentukan subset kolom untuk disertakan dalam tabel target. Anda dapat: - Tentukan daftar lengkap kolom yang akan disertakan: COLUMNS (userId, name, city) .- Tentukan daftar kolom yang akan dikecualikan: COLUMNS * EXCEPT (operation, sequenceNum) Klausa ini opsional. Defaultnya adalah memasukkan semua kolom dalam tabel target saat COLUMNS klausul tidak ditentukan. |
STORED AS Apakah Anda akan menyimpan rekaman sebagai SCD jenis 1 atau SCD jenis 2. Klausa ini opsional. Defaultnya adalah SCD jenis 1. |
TRACK HISTORY ON Menentukan subset kolom output untuk menghasilkan rekaman riwayat saat ada perubahan pada kolom yang ditentukan. Anda dapat: - Tentukan daftar lengkap kolom yang akan dilacak: COLUMNS (userId, name, city) .- Tentukan daftar kolom yang akan dikecualikan dari pelacakan: COLUMNS * EXCEPT (operation, sequenceNum) Klausa ini opsional. Defaultnya adalah melacak riwayat untuk semua kolom output ketika ada perubahan apa pun, setara dengan TRACK HISTORY ON * . |