Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Important
Sunucusuz genel işlem üzerinde bir not defteri üzerinden bağımsız somutlaştırılmış görünümler ve akış tabloları oluşturma ve yenileme Beta aşamasındadır ve yalnızca belirli bölgelerde kullanılabilir. Bkz. Not Defterleri.
Python kullanarak bir defterden bağımsız maddi görünümler ve akış tabloları oluşturabilir ve yenileyebilirsiniz. Bu, tek başına işlem hatlarını diğer Python tabanlı not defteri iş akışlarınızla birlikte yönetmenizi sağlar.
Bunu yapmanın iki yolu vardır:
- Tabloyu
@dp.materialized_view,pyspark.pipelinesve@dp.tabledekoratörleriyle tanımlayın. Mantığın DataFrame kodu olarak ifade edilmesi daha kolay olduğunda bunu kullanın. Bkz. Boru hattı dekoratörlerinin bulunduğu tabloları tanımla. - Bir Databricks SQL ambarının çalıştırdığı SQL ifadelerinin aynısını, bunları
spark.sql()öğesine ileterek gönderin. Bu, size materyalize görünüm ve akış tablosu içinREFRESHdeyimleri ve yenileme zamanlamaları dahil tam, bağımsız SQL kapsamını sunar.spark.sql()ile SQL ifadeleri gönderme konusuna bakın.
Tek başına işlem hatları için Python kaynağı, sunucusuz genel işlem için bir not defteri eklenmesini gerektirir. Databricks SQL veri ambarından Python ile bağımsız işlem hatları oluşturamaz veya yenileyemezsiniz; çünkü veri ambarı Python not defterlerini değil, SQL ifadelerini çalıştırır. Bunun yerine bir SQL veri ambarı kullanmak için bkz. Bağımsız somutlaştırılmış görünümleri kullanma ve Bağımsız akış tablolarını kullanma.
Requirements
Python ile bağımsız işlem hatları oluşturmak ve yenilemek için, Databricks Runtime 18.1 veya üzerini çalıştıran sunucusuz genel işlem kaynağına bağlı bir not defterine ihtiyacınız vardır. Bölgesel kullanılabilirlik ve izinler de dahil olmak üzere gereksinimlerin tam listesi için bkz. Not defterleri.
İşlem hattı dekoratörleriyle tablolar tanımlayın
Lakeflow pipeline'da kullandığınız dekoratörlerle bağımsız bir maddeleştirilmiş görünüm veya akış tablosu tanımlayabilirsiniz. Her süslü fonksiyon bir masa tanımlar. Hücreyi çalıştırdığınızda, Azure Databricks tabloyu oluşturur ve onu doldurmak için sunucusuz bir boru hattı çalıştırır. Güncelleme bittiğinde hücre geri döner.
Warning
İşlem hattı dekoratörleri sunucusuz ortam sürümü 5 veya üzerini gerektirir.
Maddeleştirilmiş bir görünüm tanımlayın
Batch DataFrame döndüren bir fonksiyonda @dp.materialized_view kullanın. Aşağıdaki örnek, Wanderbricks örnek veri setindeki tablodan maddeleştirilmiş görünümü daily_booking_revenuebookings oluşturur:
from pyspark import pipelines as dp
from pyspark.sql import functions as F
@dp.materialized_view(name="main.default.daily_booking_revenue")
def daily_booking_revenue():
return (
spark.read.table("samples.wanderbricks.bookings")
.groupBy("check_in")
.agg(F.sum("total_amount").alias("total_revenue"))
)
Akış okumasından bir tablo tanımlamak için @dp.table yerine ' kullanın.
Bir akış tablosu tanımlayın
Akışlı DataFrame döndüren bir fonksiyonda @dp.table kullanın. Aşağıdaki örnek, aynı bookings_raw tablosunun akışlı okunmasından bookings akış tablosunu oluşturur:
from pyspark import pipelines as dp
@dp.table(name="main.default.bookings_raw")
def bookings_raw():
return spark.readStream.table("samples.wanderbricks.bookings").select("booking_id", "property_id", "total_amount")
Fonksiyon toplu bir DataFrame dönerse, @dp.table bunun yerine maddeleştirilmiş bir görünüm oluşturur. Tek istisna, her zaman bir akış tablosu sonucunu veren replace_where'dır. Aşağıdaki örnek, 1 Temmuz 2025 ve sonrasındaki check-in’ler için günlük geliri, önceki tarihleri yeniden hesaplamadan güncel tutar:
from pyspark import pipelines as dp
from pyspark.sql import functions as F
@dp.table(
name="main.default.booking_revenue_rw",
replace_where=F.col("check_in") >= F.to_date(F.lit("2025-07-01")),
)
def booking_revenue_rw():
return (
spark.read.table("samples.wanderbricks.bookings")
.groupBy("check_in")
.agg(F.sum("total_amount").alias("total_revenue"))
)
Her çalıştırma, koşulla eşleşen satırları siler ve yalnızca o aralığı yeniden hesaplar. Bkz. REPLACE WHERE akışlarıyla toplu işleme.
Bir masayı yenile
Bir dekoratör ile tanımladığınız bir tabloyu yenilemek için, defter hücresini yeniden çalıştırarak, tüm defteri çalıştırarak veya not defterini iş olarak çalıştırarak onu tanımlayan kodu tekrar çalıştırın. Her çalıştırma, tablo mevcut değilse onu oluşturur; mevcutsa yeniler.
Kaynakta bulunan tüm verileri yeniden işlemek için, iki dekoratörden herhangi birine full_refresh=True parametresini iletin:
@dp.table(name="main.default.bookings_raw", full_refresh=True)
def bookings_raw():
return spark.readStream.table("samples.wanderbricks.bookings").select("booking_id", "property_id", "total_amount")
Dekoratörle tanımlanmış bir tabloda REFRESH deyimini kullanamazsınız ya da yenilemeleri SCHEDULE veya TRIGGER ON UPDATE ile zamanlayamazsınız. Zamanlanmış olarak yenilemek için tabloyu SQL'de tanımlayın veya not defterini görev olarak zamanlayın. Bakınız Lakeflow İşleri.
Tabloyu yapılandırma
Dekoratörler, işlem hattında da kabul edilen aynı ortak veri kümesi parametrelerini kabul eder; bunlara comment, table_properties, partition_cols, cluster_by, schema ve spark_conf dâhildir:
@dp.materialized_view(
name="main.default.daily_booking_revenue",
comment="Daily booking revenue.",
table_properties={"quality": "gold"},
cluster_by=["check_in"],
)
def daily_booking_revenue():
return (
spark.read.table("samples.wanderbricks.bookings")
.groupBy("check_in")
.agg(F.sum("total_amount").alias("total_revenue"))
)
Parametre listesi için materialized_view ve tabloya bakınız.
private=True desteklenmez, çünkü özel bir tablo yalnızca aynı boru hattındaki diğer veri setleri tarafından okunabilir.
Desteklenmeyen API'ler
Bağımsız bir tablo, tek bir akışa sahip tek bir veri setisidir, bu yüzden veri kümeleri arasındaki ilişkileri tanımlayan API'ler mevcut değildir. Aşağıdakiler, boru hattı dışında hataya neden olur:
-
@dp.temporary_viewvedp.create_streaming_table -
@dp.append_flowve diğer ek akışlar -
dp.create_auto_cdc_flowvedp.create_auto_cdc_from_snapshot_flow - REPLACE USING akışlarını tanımlayan
@dp.replace_flowvereplace_usingparametresi. Bkz. REPLACE USING akışlarıyla kısmi anlık görüntü değiştirme. dp.create_sink- Beklentiler, örneğin
@dp.expectve@dp.expect_or_fail
Bunları kullanmak için bunun yerine bir Lakeflow işlem hattı oluşturun. Bkz. Pythonile işlem hattı kodu geliştirme.
spark.sql() ile SQL deyimlerini gönder
Bir Python not defterinde, Databricks SQL ambarından çalıştıracağınız ifadelerin aynısını spark.sql() öğesine iletin. Bağımsız maddileştirilmiş görünüm ve akış tablosu söz dizimi aynıdır; yalnızca ifadeyi gönderme biçiminiz farklıdır. Bir ambarda olduğu gibi, her CREATE veya REFRESH deyimi işlemi işlemek için sunucusuz bir işlem hattı çalıştırır.
Oturum spark varsayılan olarak Azure Databricks not defterlerinde kullanılabilir, bu nedenle içeri aktarma gerekmez.
Gerçekleştirilmiş görünüm oluşturma
Aşağıdaki örnek, temel tablodan mv1gerçekleştirilmiş görünümü base_table1 oluşturur:
spark.sql("""
CREATE OR REPLACE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM base_table1
GROUP BY date
""")
Zamanlanmış ve tetiklenen yenilemeler gibi tüm CREATE MATERIALIZED VIEW ayrıntılar için bkz. Gerçekleştirilmiş görünüm oluşturma.
Akış tablosu oluşturma
Aşağıdaki örnek, akış tablosunu tablodan salesraw_data oluşturur:
spark.sql("""
CREATE OR REFRESH STREAMING TABLE sales
AS SELECT product, price FROM STREAM raw_data
""")
Otomatik Yükleyici ile dosya yükleme ve zamanlama gibi tüm CREATE STREAMING TABLE ayrıntılar için bkz. Tek başına akış tablolarını kullanma.
Somutlaştırılmış görünümü veya akış tablosunu yenile
Bağımsız bir tabloyu kaynağındaki en güncel verilerle güncellemek için REFRESH deyimini kullanın:
spark.sql("REFRESH MATERIALIZED VIEW mv1")
spark.sql("REFRESH STREAMING TABLE sales")
Sunucusuz genel işlemde yenilemeler zaman uyumludur. Zaman uyumsuz yenilemeler ( ASYNC anahtar sözcük) desteklenmez. Bkz . Sunucusuz genel işlem.
Deyimleri parametreleştirme
Python kodunuzdaki değerleri sabit olarak kodlamak yerine bir SQL ifadesine aktarmak için, SQL'de adlandırılmış parametre işaretçileri kullanın ve bu değerleri args öğesinin spark.sql() bağımsız değişkeni aracılığıyla sağlayın. Değişmez değerler için doğrudan :min_sales gibi bir işaretleyici kullanın. İşaretçiyi IDENTIFIER() yalnızca parametre tablo, görünüm veya şema gibi bir nesne adı olduğunda kaydırır, çünkü tanımlayıcılar düz dize değerleri olarak değiştirilemez.
Aşağıdaki örnek hem gerçekleştirilmiş görünüm adını hem de filtre değerini parametreleştirir:
mv_name = "main.sales.regional_sales"
min_sales = 1000
spark.sql("""
CREATE OR REPLACE MATERIALIZED VIEW IDENTIFIER(:mv)
AS SELECT
region,
sum(sales) AS sum_of_sales
FROM base_table1
WHERE sales > :min_sales
GROUP BY region
""", args={
"mv": mv_name,
"min_sales": min_sales,
})
Daha fazla bilgi için bkz.: Parametre işaretçileri ve IDENTIFIER yan tümcesi.
Diğer ifadeleri çalıştırma
Python not defterinden, herhangi bir bağımsız somutlaştırılmış görünüm veya akış tablosu deyimini spark.sql()'a ileterek çalıştırabilirsiniz; buna yenilemeyi zamanlama, bir tabloyu değiştirme veya bir tabloyu silme deyimleri de dahildir. SQL söz dizimi dahil olmak üzere gerçekleştirilmiş görünümlerin ve akış tablolarının nasıl kullanılacağını anlamak için bkz. Tek başına gerçekleştirilmiş görünümleri kullanma ve Tek başına akış tablolarını kullanma.
Limitations
Sunucusuz genel işlemde oluşturulan tek başına gerçekleştirilmiş görünümler ve akış tabloları, zaman uyumsuz yenilemeler için destek olmaması ve tablo başına maliyet atfı olmaması gibi ek sınırlamalara sahiptir. Tam liste için bkz. Sunucusuz genel işlem.
Bu boru hatları SQL deposu yerine sunucusuz genel hesaplama üzerinde çalıştıkları için, kapalı bir depodan özel etiketler devralmazlar.
system.billing.usage için ambar etiketi aktarımı yalnızca sorguları bir SQL ambarında çalışan somutlaştırılmış görünümler ve akış tabloları için geçerlidir. Bkz. Özel etiketlerle maliyetleri SQL veri ambarına atfetme.
Boru hattı dekoratörleriyle tanımlanan tablolar aşağıdaki ek sınırlamalara sahiptir:
- Bunları bir
REFRESHaçıklama ile yenileyemezsin veya güncellemeleri planlayamazsınSCHEDULE.TRIGGER ON UPDATEBkz. Tabloyu yenile. - Beklentiler, ek akışlar, değişiklik veri yakalama (CDC) akışları, yutucular ve geçici görünümler desteklenmemektedir. Desteklenmeyen API'lere bakınız.
-
private=Truedesteklenmez.