Aracılığıyla paylaş


Gerçekleştirilmiş görünümler için artımsal yenileme

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 ... INTO iş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:
  • Gerçekleştirilmiş görünüm, içinde beklentiler barındıran bir görünümden okunduğunda.
  • Gerçekleştirilmiş görünümün bir DROP beklentisi olduğunda ve NOT NULL sütunlarını şemasına dahil ettiğinde.
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:
  • ROW_BASED
  • PARTITION_OVERWRITE
  • WINDOW_FUNCTION
  • APPEND_ONLY
  • GROUP_AGGREGATE
  • GENERIC_AGGREGATE
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:00
    • Flow '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.
  • INCREMENTAL artı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 STRICT maliyet, 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.
  • FULL artı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.