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.
Bu makalede gerçekleştirilmiş görünümlerdeki artımlı yenilemeler için semantik ve gereksinimler özetlenir ve artımlı yenilemeyi destekleyen SQL işlemleri, anahtar sözcükler ve yan tümceler tanımlanır. Artımlı ve tam güncellemeler arasındaki farkların tartışılması ve malzemeleştirilmiş görünümler ile akış tabloları arasında seçim yapma önerileri içerir.
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 Databricks SQL'de mi yoksa Lakeflow Spark Bildirimli İşlem Hatları ile mi tanımlandığına bakılmaksızın sunucusuz işlem hatlarında çalıştırılır.
Databricks SQL kullanılarak tanımlanan gerçekleştirilmiş görünümler için, sunucusuz Lakeflow Spark Bildirimli İşlem Hatları için çalışma alanınızın etkinleştirilmesi gerekmez. Yenileme işlemi otomatik olarak sunucusuz işlem hattı kullanır.
Lakeflow Spark Bildirimli İş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:
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
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:
Important
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ı.
- 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. 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 esnasında veya daha sonra ALTER TABLE ifadesiyle ayarlayabilirsiniz. Ö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
Gerçekleştirilmiş görünüm güncelleştirildiğinde, 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 görünümde artımlı yenileme gerçekleştirmeye yönelik gerçekleştirilmiş görünüm için varsayılan yenileme. 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 derlemenin çıkışı aynıdır. Azure Databricks, artımlı yenileme ile tam yeniden ödeme arasında daha ucuz seçeneği 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 derlenir.
SQL ambarı veya sunucusuz Lakeflow Spark Bildirimli İşlem Hatları ile malzemeleşmiş görünümler oluşturduğunuzda, Azure Databricks sorguları destekliyorsa bu görünümleri kademeli olarak 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, tabloyu ve denetim noktalarını temizleyerek ve kaynakta bulunan tüm verileri yeniden işleyerek gerçekleştirilmiş görünümdeki sonuçların üzerine yazar.
Databricks SQL kullanılarak tanımlanan gerçekleştirilmiş görünümlerde tam yenileme gerçekleştirmek için aşağıdaki söz dizimini kullanın:
REFRESH MATERIALIZED VIEW mv_name FULL
Lakeflow Spark Bildirimli İşlem Hatlarında tanımlanan gerçekleştirilmiş görünümler için, seçili veri kümelerinde veya işlem hattındaki tüm veri kümelerinde tam yenileme çalıştırmayı seçebilirsiniz. bkz. İşlem hattı yenileme semantiği.
Important
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 MATERIALIZED VIEW.
Important
Bazı anahtar sözcükler ve yan tümceler sorgulanan veri kaynaklarında satır izlemenin etkinleştirilmesini gerektirir. Bkz. 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 | Artımlı yenileme desteği |
|---|---|
SELECT ifadeler* |
Evet, belirlenimci yerleşik işlevler ve sabit kullanıcı tanımlı işlevler (UDF) gibi ifadeler desteklenir. |
GROUP BY |
Yes |
WITH |
Evet, yaygın tablo ifadeleri desteklenir. |
UNION ALL* |
Yes |
FROM |
Desteklenen temel tablolar Delta tabloları, gerçekleştirilmiş görünümler ve akış tablolarıdır. |
WHERE, HAVING* |
Filtre yan tümceleri, WHERE ve HAVING gibi desteklenir. |
INNER JOIN* |
Yes |
LEFT OUTER JOIN* |
Yes |
FULL OUTER JOIN* |
Yes |
RIGHT OUTER JOIN* |
Yes |
OVER |
Yes.
PARTITION_BY sütunlarının pencere işlevlerinde artımlı hale getirilmesi için belirtilmesi gerekir. |
QUALIFY |
Yes |
EXPECTATIONS |
Evet, beklentileri içeren materyalize edilmiş görünümler artımlı olarak yenilenebilir. Ancak, aşağıdaki durumlarda artımlı yenileme desteklenmez:
|
| 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. |
| Delta olmayan kaynaklar | Birimler, dış konumlar ve yabancı kataloglar gibi kaynaklar desteklenmemektedir. |
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 |
No | 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_typeplanning_information olduğunda Lakeflow Spark Bildirimli İşlem Hatları olay günlüğü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ı:
-
- timestamp
- message
-
2025-03-21T22:23:16.497+00:00Flow 'sales' has been planned in :re[LDP] to be executed as ROW_BASED.
Bkz. İşlem hattı olay günlüğü.
güncelleme ilkesi
Azure Databricks varsayılan olarak 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.
-- 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;
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.