Delta Live Tables SQL dil başvurusu
Bu makalede Delta Live Tables SQL programlama arabiriminin ayrıntıları yer alır.
- Python API'si hakkında bilgi için bkz . Delta Live Tables Python dil başvurusu.
- SQL komutları hakkında daha fazla bilgi için bkz . SQL dil başvurusu.
SQL sorgularınızda Python kullanıcı tanımlı işlevleri (UDF) kullanabilirsiniz, ancak BU UDF'leri SQL kaynak dosyalarında çağırmadan önce Python dosyalarında tanımlamanız gerekir. Bkz . Kullanıcı tanımlı skaler işlevler - Python.
Sınırlamalar
PIVOT
yan tümcesi desteklenmiyor. pivot
Spark'taki işlem, çıkış şemasını hesaplamak için giriş verilerinin hevesle yüklenmesini gerektirir. Bu özellik Delta Live Tables'da desteklenmez.
Delta Live Tabloları gerçekleştirilmiş görünüm veya akış tablosu oluşturma
Not
- Gerçekleştirilmiş
CREATE OR REFRESH LIVE TABLE
görünüm oluşturma söz dizimi kullanım dışıdır. Bunun yerine kullanınCREATE OR REFRESH MATERIALIZED VIEW
. - Sıvı kümelemeye olanak tanımak için yan tümcesini
CLUSTER BY
kullanmak için işlem hattınızın önizleme kanalını kullanacak şekilde yapılandırılması gerekir.
Akış tablosu veya gerçekleştirilmiş görünüm bildirirken aynı temel SQL söz dizimini kullanırsınız.
SQL ile Delta Live Tables gerçekleştirilmiş görünümü bildirme
Aşağıda, SQL ile Delta Live Tablolarında gerçekleştirilmiş bir görünüm bildirme söz dizimi açıklanmaktadır:
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
SQL ile Delta Live Tables akış tablosu bildirme
Akış tablolarını yalnızca akış kaynağında okuyan sorguları kullanarak bildirebilirsiniz. Databricks, dosyaların bulut nesne depolama alanından akışla alımı için Otomatik Yükleyici'nin kullanılmasını önerir. Bkz. Otomatik Yükleyici SQL söz dizimi.
İşlem hattınızdaki diğer tabloları veya görünümleri akış kaynakları olarak belirtirken işlevi bir veri kümesi adının çevresine STREAM()
eklemeniz gerekir.
Aşağıda, SQL ile Delta Live Tablolarında Akış tablosu bildirme söz dizimi açıklanmaktadır:
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
Delta Live Tables görünümü oluşturma
Aşağıda, SQL ile görünümleri bildirme söz dizimi açıklanmaktadır:
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
Otomatik Yükleyici SQL söz dizimi
Aşağıda, SQL'de Otomatik Yükleyici ile çalışmaya yönelik söz dizimi açıklanmaktadır:
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",
...
)
)
Otomatik Yükleyici ile desteklenen biçim seçeneklerini kullanabilirsiniz. map()
işlevini kullanarak yöntemine read_files()
seçenekleri geçirebilirsiniz. Seçenekler anahtar-değer çiftleridir ve burada anahtarlar ve değerler dizelerdir. Destek biçimleri ve seçenekleri hakkında ayrıntılı bilgi için bkz . Dosya biçimi seçenekleri.
Örnek: Tabloları tanımlama
Dış veri kaynağından veya işlem hattında tanımlanan veri kümelerinden okuyarak veri kümesi oluşturabilirsiniz. Bir iç veri kümesinden okumak için anahtar sözcüğünü LIVE
veri kümesi adına ekleyin. Aşağıdaki örnek iki farklı veri kümesini tanımlar: JSON dosyasını giriş kaynağı olarak alan adlı taxi_raw
bir tablo ve tabloyu giriş olarak alan taxi_raw
adlı filtered_data
bir tablo:
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
Örnek: Akış kaynağından okuma
Otomatik Yükleyici veya iç veri kümesi gibi bir akış kaynağından veri okumak için bir STREAMING
tablo tanımlayın:
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)
Akış verileri hakkında daha fazla bilgi için bkz . Delta Live Tabloları ile verileri dönüştürme.
Tabloların nasıl gerçekleştirilmesini denetleme
Tablolar ayrıca bunların gerçekleştirilmesi için ek denetim sunar:
- kullanarak tabloların nasıl bölümleneceğini belirtin.
PARTITIONED BY
Sorguları hızlandırmak için bölümleme kullanabilirsiniz. - kullanarak
TBLPROPERTIES
tablo özelliklerini ayarlayabilirsiniz. Bkz . Delta Live Tables tablo özellikleri. - ayarını kullanarak
LOCATION
bir depolama konumu ayarlayın. Varsayılan olarak, tablo verileri ayarlanmadıysaLOCATION
işlem hattı depolama konumunda depolanır. - Oluşturulan sütunları şema tanımınızda kullanabilirsiniz. Bkz . Örnek: Şema ve bölüm sütunları belirtme.
Not
Boyutu 1 TB'tan küçük tablolar için Databricks, Delta Live Tables'ın veri düzenlemesini denetlemesine izin vermenizi önerir. Tablonuzun bir terabayttan fazla büyümesini beklemiyorsanız, Databricks bölüm sütunlarını belirtmemenizi önerir.
Örnek: Şema ve bölüm sütunları belirtme
tablo tanımlarken isteğe bağlı olarak bir şema belirtebilirsiniz. Aşağıdaki örnek, Delta Lake tarafından oluşturulan sütunları kullanma ve tablo için bölüm sütunları tanımlama da dahil olmak üzere hedef tablonun şemasını belirtir:
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 ...
Varsayılan olarak, bir şema belirtmezseniz Delta Live Tables şemayı table
tanımdan çıkartır.
Örnek: Tablo kısıtlamalarını tanımlama
Not
Tablo kısıtlamaları için Delta Live Tables desteği Genel Önizleme aşamasındadır. Tablo kısıtlamalarını tanımlamak için işlem hattınızın Unity Kataloğu özellikli bir işlem hattı olması ve kanalı kullanacak şekilde yapılandırılması preview
gerekir.
Şema belirtirken birincil ve yabancı anahtarlar tanımlayabilirsiniz. Kısıtlamalar bilgilendirme amaçlıdır ve uygulanmaz. SQL dil başvurusunda CONSTRAINT yan tümcesine bakın.
Aşağıdaki örnek, birincil ve yabancı anahtar kısıtlaması olan bir tablo tanımlar:
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 ...
SQL ile tabloları veya görünümleri bildirirken kullanılan değerleri parametreleştirme
Spark yapılandırmaları dahil olmak üzere bir tablo veya görünüm bildiren bir sorguda yapılandırma değeri belirtmek için kullanın SET
. Deyimin tanımlı değere erişimi olduktan sonra SET
not defterinde tanımladığınız herhangi bir tablo veya görünüm. deyimi kullanılarak belirtilen tüm Spark yapılandırmaları, SET deyimini SET
izleyen herhangi bir tablo veya görünüm için Spark sorgusu yürütülürken kullanılır. Sorgudaki yapılandırma değerini okumak için dize ilişkilendirme söz dizimini ${}
kullanın. Aşağıdaki örnek adlı startDate
bir Spark yapılandırma değeri ayarlar ve bu değeri sorguda kullanır:
SET startDate='2020-01-01';
CREATE OR REFRESH MATERIALIZED VIEW filtered
AS SELECT * FROM src
WHERE date > ${startDate}
Birden çok yapılandırma değeri belirtmek için her değer için ayrı SET
bir deyim kullanın.
Örnek: Satır filtresi ve sütun maskesi tanımlama
Satır filtresi ve sütun maskesiyle gerçekleştirilmiş bir görünüm veya Akış tablosu oluşturmak için SATIR FİlTRE yan tümcesini ve MASK yan tümcesini kullanın. Aşağıdaki örnekte, hem satır filtresi hem de sütun maskesi içeren gerçekleştirilmiş bir görünümün ve Akış tablosunun nasıl tanımlanacağı gösterilmektedir:
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
Satır filtreleri ve sütun maskeleri hakkında daha fazla bilgi için bkz . Satır filtreleri ve sütun maskeleriyle tabloları yayımlama.
SQL özellikleri
Not
Sıvı kümelemeye olanak tanımak için yan tümcesini CLUSTER BY
kullanmak için işlem hattınızın önizleme kanalını kullanacak şekilde yapılandırılması gerekir.
CREATE TABLE veya VIEW |
---|
TEMPORARY Bir tablo oluşturun, ancak tablo için meta verileri yayımlamayın. TEMPORARY yan tümcesi Delta Live Tables'a işlem hattı tarafından kullanılabilen ancak işlem hattı dışında erişilmemesi gereken bir tablo oluşturmasını sağlar. İşlem süresini kısaltmak için geçici bir tablo, yalnızca bir güncelleştirme değil, bunu oluşturan işlem hattının ömrü boyunca kalır. |
STREAMING Giriş veri kümesini akış olarak okuyan bir tablo oluşturun. Giriş veri kümesinin bir akış veri kaynağı (örneğin, Otomatik Yükleyici veya tablo STREAMING ) olması gerekir. |
CLUSTER BY Tabloda sıvı kümelemeye olanak tanıyın ve kümeleme anahtarları olarak kullanılacak sütunları tanımlayın. Bkz. Delta tabloları için sıvı kümeleme kullanma. |
PARTITIONED BY Tabloyu bölümlendirmek için kullanılacak isteğe bağlı bir veya daha fazla sütun listesi. |
LOCATION Tablo verileri için isteğe bağlı bir depolama konumu. Ayarlanmazsa sistem varsayılan olarak işlem hattı depolama konumuna ayarlanır. |
COMMENT Tablo için isteğe bağlı bir açıklama. |
column_constraint Sütunda isteğe bağlı bir bilgi birincil anahtarı veya yabancı anahtar kısıtlaması. |
MASK clause (Genel Önizleme)Hassas verileri anonim hale getirmek için bir sütun maskesi işlevi ekler. Bu sütun için gelecekteki sorgular, sütunun özgün değeri yerine değerlendirilen işlevin sonucunu döndürür. İşlev, kullanıcının kimliğini ve grup üyeliklerini denetleyebildiği için, değerin yeniden düzenlenip yeniden düzenlenmeyeceğine karar verebildiği için bu, ayrıntılı erişim denetimi için kullanışlıdır. Bkz. Sütun maskesi yan tümcesi. |
table_constraint Tablodaki isteğe bağlı bir bilgi birincil anahtarı veya yabancı anahtar kısıtlaması. |
TBLPROPERTIES Tablo için isteğe bağlı tablo özellikleri listesi. |
WITH ROW FILTER clause (Genel Önizleme)Tabloya bir satır filtresi işlevi ekler. Bu tablo için gelecekteki sorgular, işlevin TRUE olarak değerlendirildiği satırların bir alt kümesini alır. Bu, işlevin belirli satırları filtreleyip filtrelememeye karar vermek için çağıran kullanıcının kimlik ve grup üyeliklerini incelemesine izin verdiğinden, ayrıntılı erişim denetimi için kullanışlıdır. Bkz. ROW FILTER yan tümcesi. |
select_statement Tablonun veri kümesini tanımlayan Delta Live Tables sorgusu. |
CONSTRAINT yan tümcesi |
---|
EXPECT expectation_name Veri kalitesi kısıtlamasını expectation_name tanımlayın. ON VIOLATION Kısıtlama tanımlanmamışsa, kısıtlamayı ihlal eden satırları hedef veri kümesine ekleyin. |
ON VIOLATION Başarısız satırlar için gerçekleştirilecek isteğe bağlı eylem: - FAIL UPDATE : İşlem hattı yürütmeyi hemen durdurun.- DROP ROW : Kaydı bırakın ve işlemeye devam edin. |
Delta Live Tablolarında SQL ile veri yakalamayı değiştirme
APPLY CHANGES INTO
Aşağıda açıklandığı gibi Delta Live Tables CDC işlevselliğini kullanmak için deyimini kullanın:
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)}]
Sorgu olmayanlarlaAPPLY CHANGES
aynı CONSTRAINT
yan tümceyi kullanarak bir APPLY CHANGES
hedef için veri kalitesi kısıtlamaları tanımlarsınız. Bkz . Delta Live Tablolarıyla veri kalitesini yönetme.
Not
ve UPDATE
olayları için INSERT
varsayılan davranış, kaynaktan CDC olayları eklemektir: hedef tablodaki belirtilen anahtarlarla eşleşen satırları güncelleştirin veya hedef tabloda eşleşen bir kayıt olmadığında yeni bir satır ekleyin. Olaylar için DELETE
işleme koşuluyla APPLY AS DELETE WHEN
belirtilebilir.
Önemli
Değişiklikleri uygulamak için bir hedef akış tablosu bildirmeniz gerekir. İsteğe bağlı olarak hedef tablonuzun şemasını belirtebilirsiniz. Hedef tablonun şemasını APPLY CHANGES
belirtirken, alanla aynı veri türüne __START_AT
sequence_by
sahip ve __END_AT
sütunlarını da eklemeniz gerekir.
Bkz . DEĞIŞIKLIKLERI UYGULAMA API'leri: Delta Live Tablolarıyla değişiklik verilerini yakalamayı basitleştirme.
Yan tümceler |
---|
KEYS Kaynak verilerdeki bir satırı benzersiz olarak tanımlayan sütun veya sütun bileşimi. Bu, hedef tablodaki belirli kayıtlara hangi CDC olaylarının uygulanacağını belirlemek için kullanılır. Sütunların birleşimini tanımlamak için virgülle ayrılmış sütun listesi kullanın. Bu yan tümce gereklidir. |
IGNORE NULL UPDATES Hedef sütunların bir alt kümesini içeren güncelleştirmelerin alımına izin verin. Bir CDC olayı mevcut bir satırla eşleştiğinde ve NULL GÜNCELLEŞTIRMELERİ YOKSAY belirtildiğinde, içeren null sütunlar hedefteki mevcut değerlerini korur. Bu, değeri null olan iç içe sütunlar için de geçerlidir.Bu yan tümce isteğe bağlıdır. Varsayılan değerlerle null var olan sütunların üzerine yazmaktır. |
APPLY AS DELETE WHEN Bir CDC olayının ne zaman upsert yerine bir DELETE olarak ele alınacağı belirtir. Sıra dışı verileri işlemek için, silinen satır geçici olarak temel delta tablosunda kaldırıldı olarak tutulur ve meta veri deposunda bu silinmiş öğe taşlarını filtreleyen bir görünüm oluşturulur. Bekletme aralığı,pipelines.cdc.tombstoneGCThresholdInSeconds table özelliği.Bu yan tümce isteğe bağlıdır. |
APPLY AS TRUNCATE WHEN Bir CDC olayının tam tablo TRUNCATE olarak ne zaman ele alınacağı belirtir. Bu yan tümce hedef tablonun tam kesilmesini tetiklediğinden, yalnızca bu işlevi gerektiren belirli kullanım örnekleri için kullanılmalıdır.APPLY AS TRUNCATE WHEN yan tümcesi yalnızca SCD türü 1 için desteklenir. SCD tür 2, kesme işlemini desteklemez.Bu yan tümce isteğe bağlıdır. |
SEQUENCE BY Kaynak verilerdeki CDC olaylarının mantıksal sırasını belirten sütun adı. Delta Live Tables, sıra dışı gelen değişiklik olaylarını işlemek için bu sıralamayı kullanır. Belirtilen sütun sıralanabilir bir veri türü olmalıdır. Bu yan tümce gereklidir. |
COLUMNS Hedef tabloya eklenecek sütunların bir alt kümesini belirtir. Şunlardan birini yapabilirsiniz: - Eklenecek sütunların tam listesini belirtin: COLUMNS (userId, name, city) .- Dışlanması gereken sütunların listesini belirtin: COLUMNS * EXCEPT (operation, sequenceNum) Bu yan tümce isteğe bağlıdır. Varsayılan değer, yan tümcesi belirtilmediğinde hedef tabloya COLUMNS tüm sütunları eklemektir. |
STORED AS Kayıtların SCD türü 1 veya SCD tür 2 olarak depolanması. Bu yan tümce isteğe bağlıdır. Varsayılan değer SCD tür 1'dir. |
TRACK HISTORY ON Belirtilen sütunlarda herhangi bir değişiklik olduğunda geçmiş kayıtları oluşturmak için çıkış sütunlarının bir alt kümesini belirtir. Şunlardan birini yapabilirsiniz: - İzlenen sütunların tam listesini belirtin: COLUMNS (userId, name, city) .- İzlemenin dışında tutulacak sütunların listesini belirtin: COLUMNS * EXCEPT (operation, sequenceNum) Bu yan tümce isteğe bağlıdır. Varsayılan değer, herhangi bir değişiklik olduğunda tüm çıkış sütunlarının geçmişini izlemektir ve ile eşdeğerdir TRACK HISTORY ON * . |