Aracılığıyla paylaş


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 VIEWkullanı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 BYkü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 BYkullanarak nasıl bölümlendiğini belirtin.
  • TBLPROPERTIESkullanarak 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_nameveri 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:
  • FAIL UPDATE: İşlem hattı yürütmeyi hemen durdurun.
  • DROP ROW: Kaydı bırakın ve işlemeye devam edin.

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, nulldeğ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 TRUNCATEtam 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:
  • 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, 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:
  • İ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, TRACK HISTORY ON *eşdeğer herhangi bir değişiklik olduğunda tüm çıkış sütunları için geçmişi izlemektir.