DLT SQL dil referansı
Bu makalede DLT SQL programlama arabiriminin ayrıntıları yer alır.
- Python API'si hakkında bilgi için DLT Python dil başvurusuna bakın.
- 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ırlama
PIVOT
yan tümcesi desteklenmiyor. Spark'taki pivot
işlemi, çıkış şemasını hesaplamak için giriş verilerinin hevesle yüklenmesini gerektirir. Bu özellik DLT'de desteklenmez.
DLT gerçekleştirilmiş görünümü veya akış tablosu oluşturma
Not
Gerçekleştirilmiş görünüm oluşturmak için CREATE OR REFRESH LIVE TABLE
söz dizimi kullanım dışıdır. Bunun yerine CREATE OR REFRESH MATERIALIZED VIEW
kullanın.
Akış tablosu veya gerçekleştirilmiş görünüm bildirirken aynı temel SQL söz dizimini kullanırsınız.
SQL ile DLT oluşturulmuş görünümü tanımlama
Aşağıda, SQL ile DLT'de materyalleştirilmiş bir görünüm tanımlama 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, ... )]
CLUSTER BY clause
[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 DLT akış tablosu bildirme
Akış tablolarını yalnızca bir akış kaynağından okuyan sorguları kullanarak tanımlayabilirsiniz. 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, STREAM()
işlevini bir veri kümesi adının çevresine eklemeniz gerekir.
Aşağıda, SQL ile DLT'de 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, ... )]
[CLUSTER BY clause]
[LOCATION path]
[COMMENT table_comment]
[TBLPROPERTIES (key1 [ = ] val1, key2 [ = ] val2, ... )]
[ WITH { ROW FILTER func_name ON ( [ column_name | constant_literal [, ...] ] ) [...] } ]
AS select_statement
DLT 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 seçenekleri read_files()
yöntemine 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, katalog ve şema için yapılandırılmış işlem hattı varsayılanlarını kullanacak tablo adını belirtin. Aşağıdaki örnek iki farklı veri kümesini tanımlar: giriş kaynağı olarak JSON dosyası alan taxi_raw
adlı tablo ve taxi_raw
tablosunu giriş olarak alan filtered_data
adlı 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 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
tablosu 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(customers_bronze)
Akış verileri hakkında daha fazla bilgi için bkz. İşlem hatları ile veri dönüştürme.
Gerçekleştirilmiş görünümden veya akış tablosundan kayıtları kalıcı olarak silme
GDPR uyumluluğu gibi silme vektörleri etkinleştirilmiş gerçekleştirilmiş bir görünümden veya akış tablosundan kayıtları kalıcı olarak silmek için nesnenin temel delta tablolarında ek işlemler gerçekleştirilmelidir. Gerçekleştirilmiş bir görünümden kayıtların silinmesini sağlamak için bkz. Silme vektörleri etkinleştirildiyse, gerçekleştirilmiş bir görünümden kayıtları kalıcı olarak silme. Akış tablosundan kayıtların silinmesini sağlamak için bkz. Akış tablosundan kayıtları kalıcı olarak silme.
Tabloların nasıl oluşturulacağını kontrol etme
Tablolar ayrıca bunların gerçekleştirilmesi için ek denetim sunar:
-
kullanarak tablolarını
CLUSTER BY
kümeleyin ve belirtin. Sorguları hızlandırmak için sıvı kümeleme kullanabilirsiniz. Bkz. Delta tabloları için sıvı kümeleme kullanma. - Tabloların
PARTITIONED BY
kullanarak nasıl bölümlendiğini belirtin. -
TBLPROPERTIES
kullanarak tablo özelliklerini ayarlayabilirsiniz. bkz. DLT tablo özellikleri. -
LOCATION
ayarını kullanarak bir depolama konumu ayarlayın. Varsayılan olarak,LOCATION
ayarlanmadıysa tablo verileri işlem hattı depolama konumunda depolanır. - Şema tanımınızda oluşturulan sütunlarını kullanabilirsiniz. Bkz. Örnek:şema ve küme sütunları belirtme.
Not
Boyutu 1 TB'tan küçük tablolar için Databricks, DLT'nin 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.
Örneği: Şema ve küme sütunları belirtme
tablo tanımlarken isteğe bağlı olarak bir şema belirtebilirsiniz. Aşağıdaki örnek, Delta Lake oluşturulan sütunların kullanılması da dahil olmak üzere hedef tablonun şemasını belirtir ve tablo için kümeleme sütunlarını tanımlar:
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))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
Varsayılan olarak, bir şema belirtmezseniz DLT şemayı table
tanımından çıkartır.
Örneği: Bölüm sütunlarını belirtme
İsteğe bağlı olarak tablo için bölüm sütunları belirtebilirsiniz:
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 ...
Sıvı kümeleme, kümeleme için esnek, iyileştirilmiş bir çözüm sağlar. DLT için PARTITIONED BY
yerine CLUSTER BY
kullanmayı göz önünde bulundurun.
Örnek: Tablo kısıtlamalarını tanımlama
Not
Tablo kısıtlamaları için DLT desteği, 'da Genel Önizleme'dedir. 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 preview
kanalını kullanacak şekilde yapılandırılması gerekir.
Şema belirtirken birincil ve yabancı anahtarlar tanımlayabilirsiniz. Kısıtlamalar bilgilendirme amaçlıdır ve uygulanmaz. SQL dil referansında 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 SET
kullanın.
SET
deyiminden sonra not defterinde tanımladığınız herhangi bir tablo veya görünüm, tanımlı değere erişebilir.
SET
deyimi kullanılarak belirtilen tüm Spark yapılandırmaları, SET deyimini 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, startDate
adlı 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ı bir SET
deyimi kullanın.
Örnek: Satır filtresi ve sütun maskesi tanımlama
Önemli
Satır filtreleri ve sütun maskeleri Genel Önizlemeiçindedir.
Materyalize edilmiş bir görünüm veya Stream tablosu oluşturmak için satır filtresi ve sütun maskesiyle, ROW FILTER yan tümcesini ve MASK yan tümcesinikullanı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(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 sales_bronze
Satır filtreleri ve sütun maskeleri hakkında daha fazla bilgi için bkz. satır filtreleri ve sütun maskeleriyle tablo yayımlama.
SQL özellikleri
CREATE TABLE veya GÖRÜNTÜLE |
---|
TEMPORARY Bir tablo oluşturun, ancak tablo için meta verileri yayımlamayın. TEMPORARY yan tümcesi DLT'ye işlem hattı tarafından kullanılabilen ancak işlem hattı dışında erişilmemesi gereken bir tablo oluşturmasını belirtir. Geçici bir tablo, yalnızca bir güncelleştirme için değil, onu oluşturan işlem hattının tüm ömrü boyunca kalır ve bu da işlem süresini kısaltır. |
STREAMING Giriş veri kümesini akış olarak okuyan bir tablo oluşturun. Giriş veri kümesinin, otomatik yükleyici veya STREAMING tablosu gibi bir akış veri kaynağı 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ümelendirmeyi 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 işlem hattı depolama konumunu varsayılan olarak kullanı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 mask maddesi. |
table_constraint Tablodaki isteğe bağlı bir bilgi birincil anahtarı veya yabancı anahtar kısıtlaması. |
TBLPROPERTIES Tablo için tablo özelliklerinin isteğe bağlı 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 madde. |
select_statement Tablonun veri kümesini tanımlayan bir DLT sorgusu. |
CONSTRAINT yan tümcesi |
---|
EXPECT expectation_name expectation_name veri kalitesi kısıtlamasını tanımlayın.
ON VIOLATION kısıtlaması 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:
|
DLT'de SQL ile veri yakalamayı değiştirme
Aşağıda açıklandığı gibi DLT CDC işlevselliğini kullanmak için APPLY CHANGES INTO
deyimini kullanın:
CREATE OR REFRESH STREAMING TABLE table_name;
APPLY CHANGES INTO 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)}]
APPLY CHANGES
hedefi için veri kalitesi kısıtlamalarını,APPLY CHANGES
olmayan sorgularla aynı CONSTRAINT
yan tümcesini kullanarak tanımlarsınız. bkz. İşlem hattı beklentileriyle veri kalitesini yönetme.
Not
INSERT
ve UPDATE
olayları için varsayılan davranış, kaynaktan CDC olaylarını 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.
DELETE
olayları için işleme, APPLY AS DELETE WHEN
koşuluyla belirtilebilir.
Önemli
Değişiklikleri uygulamak için bir hedef akış tablosu bildirmeniz gerekir. İsteğe bağlı olarak hedef tablonuzun şemasını belirtebilirsiniz.
APPLY CHANGES
hedef tablonun şemasını belirtirken, sequence_by
alanıyla aynı veri türüne sahip __START_AT
ve __END_AT
sütunlarını da eklemeniz gerekir.
Bkz. DEĞIŞIKLIKLERI UYGULA API'leri: DLTile değişiklik verilerini yakalamayı basitleştirme.
Maddeler |
---|
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 madde gereklidir. |
IGNORE NULL UPDATES Hedef sütunların bir alt kümesini içeren güncelleştirmelerin alımına izin verin. CDC olayı mevcut bir satırla eşleştiği zaman ve NULL GÜNCELLEMELERİNİ YOKSAY belirtildiği durumlarda, null olan sütunlar hedefteki mevcut değerlerini koruyacaktır. Bu, null değerine sahip iç içe yerleştirilmiş sütunlar için de geçerlidir.Bu yan tümce isteğe bağlıdır. Varsayılan ayar, null değerlerini var olan sütunların üzerine yazmaktır. |
APPLY AS DELETE WHEN CDC olayının ne zaman upsert yerine DELETE olarak ele alınacağı belirtilir. Sıra dışı verileri işlemek için, silinen satır temel Delta tablosunda geçici olarak bir "mezar taşı" olarak tutulur ve meta veri deposunda bu mezar taşlarını filtreleyen bir görünüm oluşturulur. Bekletme aralığı, şu şekilde yapılandırılabilir:pipelines.cdc.tombstoneGCThresholdInSeconds
tablo özelliği.Bu yan tümce isteğe bağlıdır. |
APPLY AS TRUNCATE WHEN Bir CDC olayının TRUNCATE tam bir tablo olarak ne zaman ele alınması gerektiğini 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ı. DLT, 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 madde gereklidir. |
COLUMNS Hedef tabloya eklenecek sütunların bir alt kümesini belirtir. Aşağıdakilerden birini yapabilirsiniz:
Bu yan tümce isteğe bağlıdır. varsayılan değer, COLUMNS yan tümcesi belirtilmediğinde hedef tabloya 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. Aşağıdakilerden birini yapabilirsiniz:
Bu yan tümce isteğe bağlıdır. Varsayılan değer, TRACK HISTORY ON * eşdeğer herhangi bir değişiklik olduğunda tüm çıkış sütunları için geçmişi izlemektir. |