Databricks SQL'de gerçekleştirilmiş görünümleri kullanma
- Gerçekleştirilmiş görünümünüzle Azure Özel Bağlantı bir bağlantı kullanmanız gerekiyorsa Databricks temsilcinize başvurun.
Bu makalede, performansı artırmak ve veri işleme ve analiz iş yüklerinizin maliyetini azaltmak için Databricks SQL'de gerçekleştirilmiş görünümlerin nasıl oluşturulacağı ve kullanılacağı açıklanmaktadır.
Gerçekleştirilmiş görünümler nelerdir?
Databricks SQL'de gerçekleştirilmiş görünümler, kullanıcıların kaynak tablolardaki verilerin en son sürümüne göre sonuçları önceden derlemesine olanak sağlayan Unity Kataloğu yönetilen tablolarıdır. Azure Databricks'te gerçekleştirilmiş görünümler, döndürülen sonuçlar gerçekleştirilmiş görünüm sorgulandığında sonuçları her zaman güncelleştirmek yerine, gerçekleştirilmiş görünümün son yenilendiği verilerin durumunu yansıttığından diğer uygulamalardan farklıdır. Gerçekleştirilmiş görünümleri el ile yenileyebilir veya yenilemeleri zamanlayabilirsiniz.
Gerçekleştirilmiş görünümler ayıklama, dönüştürme ve yükleme (ETL) işleme gibi veri işleme iş yükleri için güçlüdür. Gerçekleştirilmiş görünümler, uyumluluk, düzeltmeler, toplamalar veya genel değişiklik verileri yakalama (CDC) için verileri işlemek için basit, bildirim temelli bir yol sağlar. Gerçekleştirilmiş görünümler yavaş sorguları ve sık kullanılan hesaplamaları önceden hesaplayarak maliyeti azaltır ve sorgu gecikme süresini artırır. Gerçekleştirilmiş görünümler ayrıca temel tabloları temizleyerek, zenginleştirerek ve kötüleştirerek kullanımı kolay dönüştürmelere olanak tanır. Gerçekleştirilmiş görünümler, basitleştirilmiş bir son kullanıcı deneyimi sağlarken maliyetleri azaltabilir çünkü bazı durumlarda temel tablolardaki değişiklikleri artımlı olarak hesaplayabilirler.
Gerçekleştirilmiş görünümler ilk olarak Delta Live Tables'ın kullanıma sunulmasıyla Azure Databricks'te desteklendi. Databricks SQL ambarında gerçekleştirilmiş bir görünüm oluşturduğunuzda, yenilemeleri gerçekleştirilmiş görünümde işlemek için bir Delta Live Tables işlem hattı oluşturulur. Yenileme işlemlerinin durumunu Delta Live Tables kullanıcı arabiriminde, Delta Live Tables API'sinde veya Delta Live Tables CLI'da izleyebilirsiniz. Bkz . Gerçekleştirilmiş görünüm yenilemesinin durumunu görüntüleme.
Gereksinim -leri
Gerçekleştirilmiş görünümler oluşturmak veya yenilemek için:
Unity Kataloğu etkin bir profesyonel veya sunucusuz SQL ambarı kullanmanız gerekir.
Gerçekleştirilmiş bir görünümü yenilemek için, bunu oluşturan çalışma alanında olmanız gerekir.
Çalışma alanınız sunucusuz SQL ambarlarını destekleyen bir bölgede olmalıdır.
Gerçekleştirilmiş görünümleri sorgulamak için:
- Gerçekleştirilmiş görünümün sahibi olmanız veya
SELECT
gerçekleştirilmiş görünümde, ana veUSE SCHEMA
üstleriyle birlikte sahipUSE CATALOG
olmanız gerekir. - Aşağıdaki işlem kaynaklarından birini kullanmanız gerekir:
- SQL ambarı
- Delta Live Tables arabirimleri
- Paylaşılan erişim modu işlem
- Çalışma alanı sunucusuz işlem için etkinleştirildiği sürece Databricks Runtime 15.4 ve üzeri üzerinde tek kullanıcılı erişim modu. Bkz . Tek kullanıcılı işlemde ayrıntılı erişim denetimi
- Yalnızca gerçekleştirilmiş görünüm sahibiyseniz: Databricks Runtime 15.3 ve altında çalışan tek kullanıcılı erişim modu işlem kaynağı.
Gerçekleştirilmiş görünümleri kullanmayla ilgili diğer kısıtlamalar hakkında bilgi edinmek için bkz . Sınırlamalar.
Gerçekleştirilmiş görünüm oluşturma
Databricks SQL gerçekleştirilmiş görünüm işlemleri, gerçekleştirilmiş görünümde CREATE
veri oluşturmak ve yüklemek için Databricks SQL ambarını kullanır. Gerçekleştirilmiş görünüm oluşturmak zaman uyumlu bir işlemdir; bu CREATE MATERIALIZED VIEW
, gerçekleştirilmiş görünüm oluşturulana ve ilk veri yükü bitene kadar komut blokları anlamına gelir. Her Databricks SQL gerçekleştirilmiş görünümü için sunucusuz Delta Live Tables işlem hattı otomatik olarak oluşturulur. Gerçekleştirilmiş görünüm yenilendiğinde Delta Live Tables işlem hattı yenilemeyi işler.
Gerçekleştirilmiş görünüm oluşturmak için deyimini CREATE MATERIALIZED VIEW
kullanın. Create deyimi göndermek için Azure Databricks kullanıcı arabirimi, Databricks SQL CLI veya Databricks SQL API'sindeki SQL düzenleyicisini kullanın.
Söz dizimi ve parametrelerle ilgili ayrıntılar için bkz . CREATE MATERIALIZED VIEW.
Not
Gerçekleştirilmiş görünüm oluşturan kullanıcı gerçekleştirilmiş görünümün sahibidir ve aşağıdaki izinlere sahip olması gerekir:
SELECT
ayrıcalığı, gerçekleştirilmiş görünüm tarafından başvuruda bulunan temel tablolarda.USE CATALOG
veUSE SCHEMA
gerçekleştirilmiş görünüm için kaynak tabloları içeren şema ve katalog ayrıcalıkları.USE CATALOG
veUSE SCHEMA
gerçekleştirilmiş görünüm için hedef katalog ve şemadaki ayrıcalıklar.CREATE TABLE
veCREATE MATERIALIZED VIEW
gerçekleştirilmiş görünümü içeren şemadaki ayrıcalıklar.
Aşağıdaki örnek, temel tablodan base_table1
gerçekleştirilmiş görünümü mv1
oluşturur:
CREATE MATERIALIZED VIEW mv1
AS SELECT
date, sum(sales) AS sum_of_sales
FROM
table1
GROUP BY
date;
Dış sistemlerden veri yükleme
Databricks, desteklenen veri kaynakları için Lakehouse Federasyonu kullanılarak dış verilerin yüklenmesini önerir. Lakehouse Federation tarafından desteklenmeyen kaynaklardan veri yükleme hakkında bilgi için bkz . Veri biçimi seçenekleri.
Gerçekleştirilmiş görünümü yenileme
İşlem, REFRESH
temel tablodaki en son değişiklikleri yansıtacak şekilde gerçekleştirilmiş görünümü yeniler. İşlem varsayılan olarak zaman uyumludur, yani komut yenileme işlemi tamamlanana kadar engellenir. Gerçekleştirilmiş bir görünümü yenilemek için deyimini REFRESH MATERIALIZED VIEW
kullanın. Bu komutun SQL söz dizimi ve parametreleri hakkında ayrıntılı bilgi için bkz . YENİLEME (GERÇEKLEŞTIRILMIŞ GÖRÜNÜM veya AKıŞ TABLOSU ). Artımlı olarak yenilenebilen gerçekleştirilmiş görünüm türleri hakkında daha fazla bilgi edinmek için bkz . Gerçekleştirilmiş görünümler için yenileme işlemleri.
Yenileme deyimi göndermek için Azure Databricks kullanıcı arabirimindeki SQL düzenleyicisini, SQL ambarı, Databricks SQL CLI veya Databricks SQL API'sine bağlı bir not defterini kullanın.
Gerçekleştirilmiş görünüm yalnızca sahibi tarafından yapılabilir REFRESH
.
Aşağıdaki örnek gerçekleştirilmiş görünümü yeniler mv1
:
REFRESH MATERIALIZED VIEW mv1;
Databricks SQL gerçekleştirilmiş görünümleri nasıl yenilenir?
Gerçekleştirilmiş görünümler, yenileme işlemlerini işlemek için sunucusuz Delta Live Tables işlem hatlarını otomatik olarak oluşturur ve kullanır. Yenileme Delta Live Tables işlem hattı tarafından yönetilir ve güncelleştirme gerçekleştirilmiş görünümü oluşturmak için kullanılan Databricks SQL ambarı tarafından izlenir.
Delta Live Tables işlem hatları sürekli veya tetiklenen yürütme modunu kullanır. Gerçekleştirilmiş görünümler her iki yürütme modunda da güncelleştirilebilir. Sürekli yürütme modunda çalışırken gereksiz işlemeyi önlemek için işlem hatları bağımlı Delta tablolarını otomatik olarak izler ve yalnızca bu bağımlı tabloların içeriği değiştiğinde bir güncelleştirme gerçekleştirir. Bkz . Delta Live Tables işlem hattı nedir?.
Not
Delta Live Tables çalışma zamanı, Delta olmayan veri kaynaklarındaki değişiklikleri algılayamaz. Tablo hala düzenli olarak güncelleştirilir, ancak aşırı yeniden derlemenin işlemde gerçekleşen artımlı işlemleri yavaşlatmasını önlemek için varsayılan tetikleyici aralığı daha yüksektir.
Varsayılan olarak, yenileme işlemleri zaman uyumlu olarak gerçekleştirilir. Yenileme işlemini zaman uyumsuz olarak gerçekleşecek şekilde de ayarlayabilirsiniz. Her yaklaşımla ilişkili davranış aşağıdaki gibidir:
- Zaman uyumlu: Zaman uyumlu yenileme, yenileme işlemi tamamlanana kadar diğer işlemleri engeller. Bu, yenileme işlemlerini İşler gibi bir düzenleme aracında sıralamanıza olanak tanır. İşler ile gerçekleştirilmiş görünümleri yönetmek için SQL görev türünü kullanın. Bkz. İş Akışlarını zamanlama ve düzenleme.
- Zaman uyumsuz: Zaman uyumsuz yenileme, gerçekleştirilmiş görünüm yenilemesi başladığında Delta Live Tables işleminde bir arka plan işi başlatır ve komut veri yükü tamamlanmadan önce döner.
Bazı sorgular artımlı olarak yenilenebilir. Bkz . Gerçekleştirilmiş görünümler için yenileme işlemleri. Artımlı yenileme gerçekleştirilemiyorsa bunun yerine tam yenileme gerçekleştirilir.
Gerçekleştirilmiş görünüm yenilemelerini zamanlama
Databricks SQL gerçekleştirilmiş görünümünü, tanımlı bir zamanlamaya göre otomatik olarak yenilenmek üzere yapılandırabilirsiniz. Zamanlama ayarlamak için aşağıdakilerden birini yapın:
- Gerçekleştirilmiş görünümü oluştururken zamanlamayı yan tümcesiyle
SCHEDULE
yapılandırın - ALTER MATERIALIZED VIEW deyimiyle bir zamanlama ekleyin.
Bir zamanlama oluşturulduğunda, güncelleştirmeyi işlemek için otomatik olarak yeni bir Databricks işi yapılandırılır.
Zamanlamayı görüntülemek için aşağıdakilerden birini yapın:
DESCRIBE EXTENDED
Azure Databricks kullanıcı arabiriminde SQL düzenleyicisinden deyimini çalıştırın.- Gerçekleştirilmiş görünümü görüntülemek için Katalog Gezgini'ni kullanın. Zamanlama, Genel Bakış sekmesinde, Yenileme durumu altında listelenir. Bkz . Katalog Gezgini nedir?.
Gerçekleştirilmiş görünüm yenilemesinin durumunu görüntüleme
Not
Delta Live Tables işlem hattı gerçekleştirilmiş görünüm yenilemelerini yönettiğinden, işlem hattı için başlatma süresi nedeniyle gecikme yaşanıyor. Bu süre, yenilemeyi gerçekleştirmek için gereken süreye ek olarak saniyeler ile dakikalar içinde olabilir.
Delta Live Tables kullanıcı arabiriminde gerçekleştirilmiş görünümü yöneten işlem hattını görüntüleyerek veya gerçekleştirilmiş görünüm için komutu tarafından DESCRIBE EXTENDED
döndürülen Yenileme Bilgileri'ni görüntüleyerek gerçekleştirilmiş görünüm yenilemesinin durumunu görüntüleyebilirsiniz.
Delta Live Tables olay günlüğünü sorgulayarak gerçekleştirilmiş bir görünümün yenileme geçmişini de görüntüleyebilirsiniz. Gerçekleştirilmiş görünüm için yenileme geçmişini görüntüleme bölümüne bakın.
Delta Live Tables kullanıcı arabiriminde yenileme durumunu görüntüleme
Varsayılan olarak, gerçekleştirilmiş görünümü yöneten Delta Live Tables işlem hattı Delta Live Tables kullanıcı arabiriminde görünmez. Delta Live Tables kullanıcı arabiriminde işlem hattını görüntülemek için işlem hattının İşlem hattı ayrıntıları sayfasının bağlantısına doğrudan erişmeniz gerekir. Bağlantıya erişmek için:
- Deyimi tarafından döndürülen tablonun En Son Yenileme satırında gösterilen bağlantıyı kopyalayıp yapıştırın
DESCRIBE EXTENDED
. - Gerçekleştirilmiş görünümün köken sekmesinde İşlem Hatları'na ve ardından işlem hattı bağlantısına tıklayın.
Azure Databricks kullanıcı arabirimindeki SQL düzenleyicisi kullanılarak gönderilen zaman uyumsuz REFRESH
komutlar için, Sonuçlar panelinde gösterilen bağlantıyı izleyerek yenileme durumunu görüntüleyebilirsiniz.
Etkin yenilemeyi durdurma
Delta Live Tables kullanıcı arabiriminde etkin yenilemeyi durdurmak için İşlem hattı ayrıntıları sayfasında Durdur'a tıklayarak işlem hattı güncelleştirmesini durdurun. Yenilemeyi Databricks CLI veya POST /api/2.0/pipelines/{pipeline_id}/stop işlemiyle pipelines API'sinde de durdurabilirsiniz.
Gerçekleştirilmiş görünümün tanımını güncelleştirme
Gerçekleştirilmiş görünümün tanımını güncelleştirmek için önce bırakmanız, ardından gerçekleştirilmiş görünümü yeniden oluşturmanız gerekir.
Gerçekleştirilmiş görünümü bırakma
Not
Gerçekleştirilmiş görünümü bırakma komutunu göndermek için bu gerçekleştirilmiş görünümün sahibi olmanız gerekir.
Gerçekleştirilmiş görünümü bırakmak için DROP VIEW deyimini kullanın. Bir DROP
deyim göndermek için Azure Databricks kullanıcı arabiriminde, Databricks SQL CLI'sinde veya Databricks SQL API'sinde SQL düzenleyicisini kullanabilirsiniz. Aşağıdaki örnek, gerçekleştirilmiş görünümü bırakır mv1
:
DROP MATERIALIZED VIEW mv1;
Gerçekleştirilmiş görünümü açıklama
Gerçekleştirilmiş bir görünümün sütunlarını ve veri türlerini almak için deyimini DESCRIBE
kullanın. Gerçekleştirilmiş bir görünümün sütunlarını, veri türlerini ve sahip, konum, oluşturma zamanı ve yenileme durumu gibi meta verileri almak için kullanın DESCRIBE EXTENDED
. Bir DESCRIBE
deyim göndermek için Azure Databricks kullanıcı arabirimindeki SQL düzenleyicisini, Databricks SQL CLI'yı veya Databricks SQL API'sini kullanın.
Gerçekleştirilmiş görünümün sahibini değiştirme
Hem meta veri deposu yöneticisi hem de çalışma alanı yöneticisiyseniz gerçekleştirilmiş görünümün sahibini değiştirebilirsiniz. Gerçekleştirilmiş görünümler değişiklikleri işlemek için Delta Live Tables işlem hatlarını otomatik olarak oluşturur ve kullanır. Gerçekleştirilmiş görünüm sahibini değiştirmek için aşağıdaki adımları kullanın:
- Gerçekleştirilmiş görünümün köken sekmesinde İşlem Hatları'na ve ardından işlem hattı bağlantısına tıklayın.
- İşlem hattı adının sağındaki kebap menüsüne tıklayın ve İzinler'e tıklayın. Bu, izinler iletişim kutusunu açar.
- Geçerli sahibi kaldırmak için geçerli sahibin adının sağındaki x işaretine tıklayın.
- Kullanılabilir kullanıcıların listesini filtrelemek için yazmaya başlayın. Yeni işlem hattı sahibi olması gereken kullanıcıya tıklayın.
- Değişikliklerinizi kaydetmek ve iletişim kutusunu kapatmak için Kaydet'e tıklayın.
İşlem hattında tanımlanan gerçekleştirilmiş görünümler de dahil olmak üzere tüm işlem hattı varlıkları yeni işlem hattı sahibine aittir. Gelecekteki tüm güncelleştirmeler yeni sahibin kimliği kullanılarak çalıştırılır.
Gerçekleştirilmiş görünümlere erişimi denetleme
Gerçekleştirilmiş görünümler, veri paylaşımını desteklemek için zengin erişim denetimlerini desteklerken, potansiyel olarak özel verilerin ortaya konulmasını önler. Gerçekleştirilmiş görünüm sahibi diğer kullanıcılara ayrıcalıklar verebilir SELECT
. Gerçekleştirilmiş görünüme erişimi olan SELECT
kullanıcıların gerçekleştirilmiş görünüm tarafından başvuruda bulunan tablolara erişmesi gerekmez SELECT
. Bu erişim denetimi, temel alınan verilere erişimi denetlerken veri paylaşımını etkinleştirir.
Gerçekleştirilmiş görünüme ayrıcalıklar verme
Gerçekleştirilmiş görünüme erişim vermek için deyimini GRANT
kullanın:
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
privilege_type:
SELECT
- kullanıcı gerçekleştirilmiş görünüme sahip olabilirSELECT
.REFRESH
- kullanıcı gerçekleştirilmiş görünüme sahip olabilirREFRESH
. Yenilemeler, sahibin izinleri kullanılarak çalıştırılır.
Aşağıdaki örnek gerçekleştirilmiş bir görünüm oluşturur ve kullanıcıya seçme ve yenileme ayrıcalıkları verir:
CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;
Gerçekleştirilmiş görünümden ayrıcalıkları iptal etme
Gerçekleştirilmiş görünümden erişimi iptal etmek için deyimini REVOKE
kullanın:
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
SELECT
Temel tablodaki ayrıcalıklar gerçekleştirilmiş görünüm sahibinden veya gerçekleştirilmiş görünüme ayrıcalıkları verilmiş SELECT
olan diğer kullanıcılardan iptal edildiğinde veya temel tablo bırakıldığında, gerçekleştirilmiş görünüm sahibi veya kullanıcı tarafından erişim izni verilen gerçekleştirilmiş görünümü sorgulamaya devam eder. Ancak, aşağıdaki davranış oluşur:
- Gerçekleştirilmiş görünüm sahibi veya gerçekleştirilmiş görünüme erişimini kaybeden diğer kişiler artık
REFRESH
bu gerçekleştirilmiş görünüme sahip olamaz ve gerçekleştirilmiş görünüm eskir. - Zamanlamayla otomatikleştirilmişse, bir sonraki zamanlanan
REFRESH
başarısız olur veya çalıştırılmaz.
Aşağıdaki örnek, 'den mv1
ayrıcalığı SELECT
iptal eder:
REVOKE SELECT ON mv1 FROM user1;
Değişiklik veri akışını etkinleştirme
Belirli gelişmiş kullanım örnekleri dışında gerçekleştirilmiş görünüm temel tablolarında değişiklik veri akışı gereklidir. Temel tabloda veri akışını değiştirme özelliğini etkinleştirmek için aşağıdaki söz dizimini delta.enableChangeDataFeed
kullanarak tablo özelliğini ayarlayın:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Gerçekleştirilmiş görünümün yenileme geçmişini görüntüleme
Geçerli ve geçmiş yenilemeler dahil olmak üzere gerçekleştirilmiş bir görünümde işlemlerin REFRESH
durumunu görüntülemek için Delta Live Tables olay günlüğünü sorgulayın:
SELECT
*
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = "update_progress"
ORDER BY
timestamp desc;
değerini, katalog ve şema da dahil olmak üzere gerçekleştirilmiş görünümün tam adıyla değiştirin <fully-qualified-table-name>
.
Bkz . Delta Live Tables olay günlüğü nedir?.
Artımlı yenilemenin mi yoksa tam yenilemenin mi kullanıldığı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:
Teknik | Artımlı yenileme mi? | Açıklama |
---|---|---|
FULL_RECOMPUTE |
Hayır | Gerçekleştirilmiş görünüm tamamen yeniden derlendi |
NO_OP |
Uygulanamaz | Temel tabloda değişiklik algılanmadığından gerçekleştirilmiş görünüm güncelleştirilmedi. |
ROW_BASED veya PARTITION_OVERWRITE |
Yes | Gerçekleştirilmiş görünüm, belirtilen teknik kullanılarak artımlı olarak yenilendi. |
Kullanılan tekniği belirlemek için Delta Live Tables olay günlüğünü sorgular ve burada event_type
:planning_information
SELECT
timestamp,
message
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = 'planning_information'
ORDER BY
timestamp desc;
değerini, katalog ve şema da dahil olmak üzere gerçekleştirilmiş görünümün tam adıyla değiştirin <fully-qualified-table-name>
.
Bkz . Delta Live Tables olay günlüğü nedir?.
Sınırlama
- İşlem ve çalışma alanı gereksinimleri için bkz . Gereksinimler.
- Gerçekleştirilmiş görünümler kimlik sütunlarını veya vekil anahtarları desteklemez.
- Gerçekleştirilmiş görünümde bir -able sütunu üzerinde
NULL
toplam toplama kullanılıyorsa ve bu sütunda yalnızcaNULL
değerler kalıyorsa, gerçekleştirilmiş görünüm sonuç toplama değeri yerineNULL
sıfır olur. - Değişiklik veri akışını gerçekleştirilmiş görünümden okuyamazsınız.
- Gerçekleştirilmiş görünümleri destekleyen temel dosyalar, gerçekleştirilmiş görünüm tanımında görünmeyen yukarı akış tablolarındaki verileri (olası kişisel bilgiler dahil) içerebilir. Bu veriler, gerçekleştirilmiş görünümlerin artımlı olarak yenilenmesini desteklemek için temel alınan depolamaya otomatik olarak eklenir. Gerçekleştirilmiş bir görünümün temel dosyaları, gerçekleştirilmiş görünüm şemasının parçası olmayan yukarı akış tablolarından verileri açığa çıkarma riski içerebileceğinden Databricks, temel alınan depolamanın güvenilmeyen aşağı akış tüketicileriyle paylaşılmaması önerilir. Örneğin, gerçekleştirilmiş görünümün tanımının bir
COUNT(DISTINCT field_a)
yan tümce içerdiğini varsayalım. Gerçekleştirilmiş görünüm tanımı yalnızca toplamaCOUNT DISTINCT
yan tümcesini içerse de, temel dosyalar gerçek değerlerininfield_a
listesini içerir.