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.
Gerçekleştirilmiş görünümde artımlı yenileme, kaynak verilerdeki değişiklikleri algılar ve sorgunun tamamını yeniden derlemek yerine yalnızca etkilenen sonuçları yeniden derler. Aşağıdaki bölümlerde semantikler, gereksinimler, desteklenen SQL işlemleri ve gerçekleştirilmiş görünümler ile akış tabloları arasında seçim yapma konuları ele alınmaktadır.
İşlem hatlarının nasıl yenilenmesine genel bakış için bkz. İşlem hatları nasıl yenilenir?
Sunucusuz boru hatları kullanılarak malzemeleşmiş görünümlerde güncellemeler çalıştırılırken, birçok sorgu artımlı olarak yenilenebilir. Artımlı yenilemeler, gerçekleştirilmiş görünümü tanımlamak için kullanılan veri kaynaklarında yapılan değişiklikleri algılayarak ve sonucu artımlı olarak hesaplayarak işlem maliyetlerinden tasarruf sağlar.
Yenilemeler sunucusuz işlemde çalıştırılır
Yenileme işlemleri, işlemin tek başına veya Lakeflow işlem hatları ile tanımlanmış olup olmadığına bakılmaksızın sunucusuz işlem hatlarında çalıştırılır.
Bağımsız somutlaştırılmış görünümler için çalışma alanınızın sunucusuz Lakeflow işlem hatları için etkinleştirilmiş olması gerekmez. Yenileme işlemi otomatik olarak sunucusuz bir işlem hattı kullanır.
Lakeflow işlem hatları kullanılarak tanımlanan gerçekleştirilmiş görünümler için işlem hattını sunucusuz kullanacak şekilde yapılandırmanız gerekir. Bkz . Sunucusuz işlem hattı yapılandırma.
Gerçekleştirilmiş görünümler için yenileme semantiği nedir?
Gerçekleştirilmiş görünümler toplu sorgulara eşdeğer sonuçları garantiler. Örneğin, aşağıdaki toplama sorgusunu göz önünde bulundurun:
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Bu sorguyu herhangi bir Azure Databricks ürünü kullanarak çalıştırdığınızda, sonuç, kaynaktaki transactions_tabletüm kayıtları toplamak için toplu iş semantiği kullanılarak hesaplanır ve bu da tüm kaynak verilerin tek bir işlemde taranması ve toplanması anlamına gelir.
Note
Veri kaynakları son sorgu çalıştırıldıktan sonra değişmediyse, bazı Azure Databricks ürünleri sonuçları oturumlar içinde veya oturumlar arasında otomatik olarak önbelleğe alır. Otomatik önbelleğe alma davranışları maddileştirilmiş görünümlerden farklıdır.
Aşağıdaki örnek, bu toplu sorguyu maddileştirilmiş bir görünüme dönüştürür:
SQL
CREATE OR REPLACE MATERIALIZED VIEW transaction_summary AS
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Python
@dp.materialized_view()
def transaction_summary():
return (spark.read.table("transactions_table")
.groupBy("account_id")
.agg(
count("*").alias("txn_count"),
sum("txn_amount").alias("account_revenue")
)
)
Gerçekleştirilmiş bir görünümü yenilediğinizde, hesaplanan sonuç toplu sorgu semantiğiyle aynıdır. Bu sorgu, artımlı olarak yenilenebilen gerçekleştirilmiş bir görünüm örneğidir. Bu, yenileme işleminin sonuçları hesaplamak için yalnızca kaynak transactions_table yeni veya değiştirilmiş verileri işlemek için en iyi çabayı gösterebileceği anlamına gelir.
Gerçekleştirilmiş görünümler için veri kaynağında dikkat edilmesi gerekenler
Herhangi bir veri kaynağında gerçekleştirilmiş bir görünüm tanımlayabilirsiniz ancak tüm veri kaynakları gerçekleştirilmiş görünümler için uygun değildir. Aşağıdaki uyarıları ve önerileri göz önünde bulundurun:
Önemli
Gerçekleştirilmiş görünümler, desteklenen işlemler için sonuçları artımlı olarak yenilemek için en iyi çabayı gösterir. Veri kaynaklarında yapılan bazı değişiklikler tam yenileme gerektirir. Tam yenileme çalıştırmak yerine başarısız olan bir yenileme ilkesi tanımlayabilirsiniz.
Gerçekleştirilmiş görünümü tanımlayan sorgu artımlı yenilemeyi desteklese bile, gerçekleştirilmiş görünümler için tüm veri kaynakları tam yenileme semantiğine dayanıklı olmalıdır.
- Tam yenilemenin maliyet açısından engelleyici olacağı sorgularda, tam olarak bir kez işlemeyi garanti etmek için akış tablolarını kullanın. Çok büyük tablolar buna örnek olarak verilebilir.
- Veri kaynağında bir maddileştirilmiş görünüm tanımlamayın, çünkü kayıtların yalnızca bir kez işlenmesi gerekir. Bunun yerine akış tablolarını kullanın. Örnekler şunlardır:
- Kafka gibi veri geçmişini tutmayan veri kaynakları.
- Bulut nesne depolama alanından veri almak için Otomatik Yükleyici kullanan sorgular gibi alma işlemleri.
- İşleme sonrasında verileri silmeyi veya arşivleyi planladığınız ancak aşağı akış tablolarındaki bilgileri saklamanız gereken herhangi bir veri kaynağı. Örneğin, belirli bir eşikten daha eski kayıtları silmeyi planladığınız tarihe bölünmüş bir tablo.
- Tüm veri kaynakları artımlı yenilemeleri desteklemez. Aşağıdaki veri kaynakları artımlı yenilemeyi destekler:
- Delta tabloları, Unity Kataloğu tarafından yönetilen tablolar ve Delta Lake tarafından desteklenen dış tablolar da dahil olmak üzere.
- Gerçekleştirilmiş görüntüler.
-
AUTO CDC ... INTOişlemlerinin hedefleri de dahil olmak üzere akış tabloları. - Unity Kataloğu tarafından yönetilen Iceberg tabloları (v2 ve v3). Iceberg v3, en iyi artımlı yenileme desteği için önerilir. Bkz. Apache Iceberg v3 özelliklerini kullanma. Yabancı Iceberg tabloları desteklenmez.
- Bazı artımlı yenileme işlemleri sorgulanan veri kaynaklarında satır izlemenin etkinleştirilmesini gerektirir. Delta Lake'in yalnızca Delta tabloları tarafından desteklenen bir özelliği olan satır takibi, gerçekleştirilmiş görünümler, akış tabloları ve Unity Catalog tarafından yönetilen tabloları içerir. Bkz. Azure Databricks’te satır izleme.
- Satır filtreleri veya sütun maskeleri tanımlanmış veri kaynakları artımlı yenilemeyi desteklemez. Bkz . Satır filtreleri ve sütun maskeleri
Gerçekleştirilmiş görünümleri optimize etme
Databricks, en iyi performansı elde etmek için tüm gerçekleştirilmiş görünüm kaynak tablolarında aşağıdaki özelliklerin etkinleştirilmesini önerir:
Bu özellikleri, oluşturma sırasında veya daha sonra ALTER TABLE ifadesiyle ayarlayabilirsiniz (Databricks SQL'den çalıştırılarak). Örneğin:
ALTER TABLE <table-name> SET TBLPROPERTIES (
delta.enableDeletionVectors = true,
delta.enableRowTracking = true,
delta.enableChangeDataFeed = true);
Gerçekleştirilmiş görünümler için yenileme türleri
Maddenleştirilmiş görünüm güncellendiğinde, bir yenileme veya tam yenileme belirtebilirsiniz.
- Yenileme, artımlı yenileme yapmayı dener, ancak gerekirse verilerin tam olarak yeniden derlenmesini sağlar. Artımlı yenileme yalnızca bağlı olduğunuz işlem sunucusuz olduğunda kullanılabilir.
- Tam yenileme, gerçekleştirilmiş görünümdeki tüm girişleri her zaman yeniden hesaplar ve tüm denetim noktalarını sıfırlar.
Bir güncelleştirmenin hangi yenileme türünü kullandığını belirlemek için bkz. Güncelleştirmenin yenileme türünü belirleme.
Varsayılan yenileme
Sunucusuz bir ortamda, gerçekleştirilmiş bir görünüm için varsayılan yenileme, bir artımlı yenileme yapmaya çalışır. Artımlı yenileme, son yenilemeden sonra temel alınan verilerdeki değişiklikleri işler ve ardından bu verileri tabloya ekler. Temel tablolara ve dahil edilen işlemlere bağlı olarak, yalnızca belirli türlerde malzeme görünümler kademeli olarak yenilenebilir. Artımlı yenileme mümkün değilse veya bağlı işlem sunucusuz yerine klasikse, tam bir yeniden derleme gerçekleştirilir.
Note
Azure Databricks tam veya artımlı yenileme uygular. Karar, hangi seçeneğin daha uygun maliyetli olduğuna ve sorgunun artımlı yenilemeyi destekleyip desteklemediğine bağlıdır. Bu davranışı değiştirmek için Yenileme ilkesi'ne bakın.
Artımlı yenileme ve tam yeniden hesaplamanın çıkışı aynıdır. Azure Databricks artımlı yenileme ile tam yeniden hesaplama arasında daha ucuz olanı belirlemek için bir maliyet analizi çalıştırır.
Yalnızca sunucusuz işlem hatları kullanılarak güncelleştirilen gerçekleştirilmiş görünümler artımlı yenileme kullanabilir. Sunucusuz işlem hatlarını kullanmayan gerçekleştirilmiş görünümler her zaman tamamen yeniden hesaplanır.
SQL ambarı veya sunucusuz Lakeflow işlem ardışık düzenleri ile somutlaştırılmış görünümler oluşturduğunuzda, Azure Databricks sorguları destekleniyorsa bunları artımlı şekilde yeniler. Sorgu desteklenmeyen ifadeler kullanıyorsa Azure Databricks bunun yerine tam bir yeniden derleme çalıştırır ve bu da maliyetleri artırabilir.
Bir güncelleştirmenin hangi yenileme türünü kullandığını belirlemek için bkz. Güncelleştirmenin yenileme türünü belirleme.
Tam yenileme
Tam yenileme işlemi, tabloyu ve denetim noktalarını temizleyerek ve kaynakta bulunan tüm verileri yeniden işleyerek materyalize görünümdeki sonuçların üzerine yazarak mevcut sonuçları yeniler.
Databricks SQL kullanılarak tanımlanan malzeme edilmiş görünümlerde tam güncelleme gerçekleştirmek için aşağıdaki söz dizimini kullanın:
REFRESH MATERIALIZED VIEW mv_name FULL
Lakeflow işlem hatlarında tanımlanan gerçekleştirilmiş görünümler için, seçili veri kümelerinde veya bir işlem hattındaki tüm veri kümelerinde tam yenileme çalıştırmayı seçebilirsiniz. bkz. İşlem hattı yenileme semantiği.
Önemli
Veri saklama eşiği veya el ile silme nedeniyle kayıtların kaldırıldığı bir veri kaynağında tam yenileme çalıştırıldığında, kaldırılan kayıtlar hesaplanan sonuçlara yansıtılmaz. Veriler artık kaynakta kullanılamıyorsa eski verileri kurtaramayabilirsiniz. Bu, kaynak verilerde artık bulunmayan sütunların şemasını da değiştirebilir.
Gerçekleştirilmiş görünümün artımlı yenilenmesi için destek
Aşağıdaki tabloda SQL anahtar sözcüğüne veya yan tümcesine göre artımlı yenileme desteği listeleniyor. Belirli bir sorguyu artımlı hale getirilebilirlik açısından test etmek için kullanabilirsiniz EXPLAIN CREATE MATERIALIZED VIEW.
Önemli
Bazı anahtar sözcükler ve yan tümceler sorgulanan veri kaynaklarında satır izlemenin etkinleştirilmesini gerektirir. Bkz. Azure Databricks’te satır izleme.
Bu anahtar sözcükler ve yan tümceler aşağıdaki tabloda yıldız (*) ile işaretlenmiştir.
| SQL anahtar sözcüğü veya ifade | PySpark veri çerçevesi eşdeğeri | Artımlı yenileme desteği |
|---|---|---|
SELECT ifadeler* |
df.select() veya df.selectExpr() |
Evet, belirlenimci yerleşik işlevler ve sabit kullanıcı tanımlı işlevler (UDF) gibi ifadeler desteklenir. |
GROUP BY |
df.groupBy().agg() |
Yes |
WITH |
Veri çerçevesi değişkenlerini zincirleme. | Evet, yaygın tablo ifadeleri desteklenir. |
WITH RECURSIVE |
Mevcut Değil | No. Özyinelemeli CTE'ler kullanan gerçekleştirilmiş görünümler artımlı yenileme için uygun değildir ve tam yeniden derlemeye geri döner. |
UNION ALL* |
df.union veya df.unionAll |
Yes |
FROM |
df = spark.read... |
Desteklenen temel tablolar arasında Delta tabloları, Unity Kataloğu tarafından yönetilen Iceberg tabloları, gerçekleştirilmiş görünümler ve akış tabloları yer alır. |
WHERE, HAVING* |
df.filter(), df.where(), df.groupBy().filter() |
Filtre yan tümceleri, WHERE ve HAVING gibi desteklenir. |
INNER JOIN* |
df.join() |
Yes |
LEFT OUTER JOIN* |
df.join(... how="left") |
Yes |
FULL OUTER JOIN* |
df.join(... how="full") |
Yes |
RIGHT OUTER JOIN* |
df.join(... how="right") |
Yes |
OVER |
df.over(window.partitionBy) işlevleri |
Evet.
PARTITION_BY sütunlarının pencere işlevlerinde artımlı hale getirilmesi için belirtilmesi gerekir. |
QUALIFY |
df.over(w).filter(...) |
Yes |
EXPECTATIONS |
@dp.expect |
Evet, beklentileri içeren materyalize edilmiş görünümler artımlı olarak yenilenebilir. Ancak, aşağıdaki durumlarda artımlı yenileme desteklenmez:
|
| UDFs | UDFs | Azure Databricks, bir UDF'nin davranışını değiştirip tam yenileme gerçekleştirdiğinde algılamaya çalışır. Ancak, diğer işlevleri veya kitaplıkları çağıran UDF'ler, Azure Databricks'in tanımadığı şekillerde davranışı değiştirebilir. Bir UDF'nin davranışı değiştiğinde, güncelleştirilmiş UDF'yi tam gerçekleştirilmiş görünüme uygulamak için tam yenileme gerçekleştirmek sizin sorumluluğunuzdadır. |
| Belirlenemeyen işlevler | Belirlenemeyen işlevler | Deterministik olmayan zaman işlevleri WHERE cümlelerde desteklenir. Bu, , current_date()ve current_timestamp()gibi now()işlevleri içerir. Diğer belirleyici olmayan işlevler desteklenmez. |
| Desteklenmeyen kaynaklar | Desteklenmeyen kaynaklar | Birimler, dış konumlar ve yabancı kataloglar gibi kaynaklar desteklenmemektedir. Yabancı Iceberg tabloları desteklenmez. Unity Kataloğu tarafından yönetilen Iceberg tabloları desteklenir. |
Artımlılaştırma içgörüleri
İşlem hattı düzenleyicisinde işlem hattı geliştirirken veya işlem hattı güncelleştirmesini izlerken, Tablolar panelinde her gerçekleştirilmiş görünümün en son güncelleştirmede nasıl işlendiğini gösteren bir Artımlılaştırma sütunu bulunur:
| Durum | Description |
|---|---|
| Artımlı | Somutlaştırılmış görünüm artımlı olarak yenilendi. |
| Tam yeniden hesaplama | Somutlaştırılmış görünüm tamamen yeniden hesaplandı. |
| Değişiklik yok | Kaynak veri değişikliği algılanmadığından gerçekleştirilmiş görünüm güncelleştirilmedi. |
Azure Databricks, somutlaştırılmış görünümün artımlı olarak yenilenmesini engelleyen veya gelecekteki bir güncelleştirmede bunu engelleyebilecek bir sorun algıladığında ve önerilen bir çözüm mevcutsa, durumun yanında bir içgörüsü görünür. Gerçekleştirilmiş görünüme filtrelenmiş Sorunlar panelini açmak için seçin. Her içgörü nedenini açıklar ve bir düzeltme önerir. Sık kullanılan düzeltmeler şunlardır:
- Kaynak tablolarda satır izleme veya silme vektörlerini etkinleştirin. Bkz. Somutlaştırılmış görünümleri optimize etme.
- Gerçekleştirilmiş görünüm tanımında desteklenmeyen bir işleci yeniden yazma. Bkz. Somutlaştırılmış görünüm için artımlı yenileme desteği.
- İşlem hattını sunucusuz işlem kullanacak şekilde yapılandırın.
İçgörüler, durum Değişiklik yok olduğunda bile görünebilir, bu nedenle bir güncelleştirmeyi etkilemeden önce sorunları çözebilirsiniz. İçgörüler sizi kaynak kodunuzdaki ilgili satıra da götürebilir. İzleme kullanıcı arabiriminde işlem hattı düzenleyicisi bu satırda açılır. İçgörüler, artımlı yenilemeyi engelleyen yaygın sorunları kapsar. Bir öngörünün olmaması, somutlaştırılmış bir görünümün artımlı yenilenebileceğini garanti etmez.
Aynı bilgileri program aracılığıyla almak veya önceki güncelleştirmeleri gözden geçirmek için, aşağıdaki bölümde açıklandığı gibi olay günlüğünü sorgulayın.
Güncelleştirmenin yenileme türünü belirleme
Gerçekleştirilmiş görünüm yenilemelerinin performansını iyileştirmek için Azure Databricks, yenileme için kullanılan tekniği seçmek üzere bir maliyet modeli kullanır. Aşağıdaki tabloda bu teknikler açıklanmaktadır:
| Technique | Artımlı yenileme mi? | Description |
|---|---|---|
FULL_RECOMPUTE |
Hayır | Gerçekleştirilmiş görünüm tamamen yeniden hesaplandı |
NO_OP |
Uygulanamaz | Temel tabloda değişiklik algılanmadığından oluşturulmuş görünüm güncellenmedi. |
Herhangi biri:
|
Yes | Gerçekleştirilmiş görünüm, belirtilen teknik kullanılarak kademeli olarak yenilendi. |
Ayrıca bkz Yenileme ilkesi.
Kullanılan tekniği belirlemek için, event_type öğesinin değeri planning_information olduğunda Lakeflow işlem hattı olay günlüğüsünü sorgulayın:
SELECT
timestamp,
message
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = 'planning_information'
ORDER BY
timestamp desc;
<fully-qualified-table-name> değerini, katalog ve şema da dahil olmak üzere, maddi görünümün tam adıyla değiştirin.
Bu komut için örnek çıktı:
| Tarih damgası | message |
|---|---|
2025-03-21T22:23:16.497+00:00 |
Flow 'sales' has been planned to be executed as ROW_BASED. |
Bkz. İşlem hattı olay günlüğü.
güncelleme ilkesi
Varsayılan olarak, Azure Databricks sorgu yapısına, veri değişikliği hacmine ve sistem maliyet modellemesine göre en uygun maliyetli yenileme stratejisini (artımlı veya tam) otomatik olarak seçer. Bu varsayılan davranış, el ile yapılandırma gerektirmeden yenileme performansını iyileştirir.
Ancak bazı iş yükleri daha öngörülebilir veya açıkça denetlenen yenileme davranışı gerektirir. Bu senaryoları desteklemek için gerçekleştirilmiş görünüm tanımında bir REFRESH POLICY belirtebilirsiniz. Yenileme ilkesi, Azure Databricks'in artımlı yenileme gerçekleştirip gerçekleştirmediğini, ne zaman tam yenilemeye geri dönebileceğini ve tam yeniden derleme yerine yenilemenin başarısız olup olmayacağını denetler.
kullanarak REFRESH POLICYsistemi şu şekilde yapılandırabilirsiniz:
-
AUTO(varsayılan) - Otomatik, maliyet tabanlı seçimi kullanın. Databricks, verimlilik ve sorgu özelliklerine göre artımlı veya tam yenilemeyi seçer. Çoğu kullanıcı için önerilir. -
INCREMENTAL- Artımlı yenilemeyi tercih edin. Databricks mümkün olduğunda artımlı yenileme gerçekleştirir. Sorgu planı artık artımlı yenilemeyi desteklemezse tam yenilemeye geri döner. -
INCREMENTAL STRICT- Kesinlikle artımlı yenileme gerektirir. Normal işlem sırasında kademeli yenileme gereklidir. Artımlılaştırma mümkün değilse yenileme veya oluşturma işlemi başarısız olur. -
FULL- Her zaman tam yenileme gerçekleştirin. Databricks, sorgu artımlı hale getirilebilir olsa bile hiçbir zaman artımlı yenileme gerçekleştirmez.
SQL
-- Create a materialized view with an incremental refresh policy
CREATE MATERIALIZED VIEW IF NOT EXISTS my_mv
REFRESH POLICY INCREMENTAL
AS SELECT a, sum(b) FROM my_catalog.example.my_table GROUP BY a;
Python
from pyspark import pipelines as dp
@dp.materialized_view(
refresh_policy = 'incremental_strict'
)
def my_mv():
return spark.read("main.default.source_table")
En iyi yenileme ilkesi iş yükü özelliklerinize bağlıdır:
-
AUTOçoğu iş yükü için uygundur. Maliyet ve performansı dengeler ve sorgu davranışı değiştiğinde otomatik olarak uyarlar. -
INCREMENTALartımlı yenileme avantajları sağladığında kullanışlıdır, ancak artımlılaştırma geçici olarak kullanılamaz duruma geldiğinde (örneğin, kaynak tablodaki satır izleme kapalı olduğunda) Azure Databricks'in tam yenileme gerçekleştirmesi kabul edilebilir. -
INCREMENTAL STRICTmaliyet, performans veya SLA kısıtlamalarını karşılamak için artımlı yenileme gerektiğinde ve beklenmeyen tam yenilemeler kabul edilemez olduğunda kullanılmalıdır. Bu ilke, kullanıcılar güncelleştirmenin başarısız olmasını tercih ettiğinde önerilir ve tam yenilemeye devam etmek yerine sorunun hatalarını ayıklamalarına olanak sağlar. -
FULLartımlı yenileme çok az avantaj sağladığında, veri kümesi küçük olduğunda veya sorgu yapısı sık sık artımlılaştırmayı engelleyecek şekilde değiştiğinde uygundur.
Daha fazla ayrıntı ve söz dizimi için REFRESH POLICY yan tümcesine (işlem hatları) veya veri kümesi Databricks SQL'de tanımlandıysa REFRESH POLICY yan tümcesine bakın.