Aracılığıyla paylaş


Delta Live Tables SQL dil başvurusu

Bu makalede Delta Live Tables SQL programlama arabiriminin ayrıntıları sağlanır.

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ışın ş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

Önemli

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ın CREATE OR REFRESH MATERIALIZED VIEW.

Akış tablosu veya gerçekleştirilmiş görünüm bildirirken aynı temel SQL söz dizimini kullanırsınız.

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ış kaynağı olarak belirtirken işlevi bir veri kümesi adının çevresine eklemeniz STREAM() gerekir.

Aşağıda, SQL ile gerçekleştirilmiş görünümleri ve akış tablolarını bildirmeye yönelik söz dizimi açıklanmaktadır:

CREATE OR REFRESH [TEMPORARY] { STREAMING TABLE | MATERIALIZED VIEW } table_name
  [(
    [
    col_name1 col_type1 [ GENERATED ALWAYS AS generation_expression1 ] [ COMMENT col_comment1 ] [ column_constraint ],
    col_name2 col_type2 [ GENERATED ALWAYS AS generation_expression2 ] [ COMMENT col_comment2 ] [ column_constraint ],
    ...
    ]
    [
    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, ... )]
  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 cloud_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 cloud_files() istediğiniz sayıda seçenek 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 cloud_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:

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, genellikle bölüm sütunlarını belirtmemelisiniz.

Ö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.

SQL özellikleri

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.
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ı.
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.
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_nametanımlayın. Kısıtlama tanımlanmamışsa ON VIOLATION , 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.

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 nullolan 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.tombstoneGCThresholdInSecondstable özelliği.

Bu yan tümce isteğe bağlıdır.
APPLY AS TRUNCATE WHEN

Bir CDC olayının tam tablo TRUNCATEolarak 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 kesmeyi 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.

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ı için izleme geçmişidir ve ile eşdeğerdir TRACK HISTORY ON *.