.create materialized-view
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini
Gerçekleştirilmiş görünüm, kaynak tablo üzerinden yapılan toplama sorgusudur. Tek summarize
bir deyimi temsil eder.
Komuttaki geri doldurma seçeneğinde belirtildiği gibi gerçekleştirilmiş görünüm oluşturmanın iki olası yolu vardır:
Şu andan itibaren gerçekleştirilmiş görünümü oluşturun:
- Gerçekleştirilmiş görünüm boş oluşturulur. Yalnızca görünüm oluşturulduktan sonra alınan kayıtları içerir. Bu tür oluşturma hemen döndürür ve görünüm sorgu için hemen kullanılabilir.
Kaynak tablodaki mevcut kayıtları temel alarak gerçekleştirilmiş görünümü oluşturun:
- Bkz . Gerçekleştirilmiş görünümü doldurma.
- Oluşturma işleminin tamamlanması, kaynak tablodaki kayıtların sayısına bağlı olarak uzun sürebilir. Geri doldurma tamamlanana kadar görünüm sorgular için kullanılamaz.
- Bu seçeneği kullanırken create komutu olmalıdır
async
. komutunu kullanarak yürütmeyi.show operations
izleyebilirsiniz. - komutunu kullanarak
.cancel operation
geri doldurma işlemini iptal edebilirsiniz.
Önemli
Büyük kaynak tablolarda, geri doldurma seçeneğinin tamamlanması uzun sürebilir. Bu işlem çalışırken geçici olarak başarısız olursa otomatik olarak yeniden denenmeyecektir. Ardından create komutunu yeniden yürütmeniz gerekir. Daha fazla bilgi için bkz . Gerçekleştirilmiş görünümü geri doldurma.
İzinler
Bu komut, Veritabanı Yöneticisi izinleri gerektirir. Gerçekleştirilmiş görünümü oluşturan, bu görünümün yöneticisi olur.
Sözdizimi
.create
[async
] [ifnotexists
] materialized-view
[ with
(
PropertyName =
PropertyValue,
...)
] MaterializedViewName SourceTableName {
Sorgusu on table
}
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Zorunlu | Açıklama |
---|---|---|---|
PropertyName, PropertyValue | string |
Desteklenen özellikler listesinden ad ve değer çiftleri biçimindeki özelliklerin listesi. | |
MaterializedViewName | string |
✔️ | Gerçekleştirilmiş görünümün adı. Görünüm adı aynı veritabanındaki tablo veya işlev adlarıyla çakışamaz ve tanımlayıcı adlandırma kurallarına uyması gerekir. |
SourceTableName | string |
✔️ | Görünümün tanımlandığı kaynak tablonun adı. |
Sorgu | string |
✔️ | Gerçekleştirilmiş görünümün sorgu tanımı. Daha fazla bilgi ve sınırlama için Bkz . Sorgu parametresi bölümü. |
Not
Gerçekleştirilmiş görünüm zaten mevcutsa:
ifnotexists
Bayrak belirtilirse, komut yoksayılır. Yeni tanım mevcut tanımla eşleşmese bile değişiklik uygulanmaz.ifnotexists
Bayrak belirtilmezse bir hata döndürülür.- Mevcut gerçekleştirilmiş görünümü değiştirmek için .alter materialized-view komutunu kullanın.
Desteklenen özellikler
PropertyName =
PropertyValue)
yan tümcesinde with
(
aşağıdaki özellikler desteklenir. Tüm özellikler isteğe bağlıdır.
Adı | Tür | Açıklama |
---|---|---|
geri doldurma | bool |
Görünümün şu anda içinde SourceTable true bulunan tüm kayıtları temel alarak mı oluşturulacağı yoksa bundan sonra mı (false ) oluşturulacağı. Varsayılan false değeridir. Daha fazla bilgi için bkz . Gerçekleştirilmiş görünümü geri doldurma. |
effectiveDateTime | datetime |
Yalnızca kullanırken backfill ilgili olur. Ayarlandıysa, oluşturma işlemi yalnızca tarih saatinden sonra alınan kayıtlarla doldurulur. backfill olarak da ayarlanmalıdır true . Bu özellik bir datetime değişmez değeri bekler; örneğin, effectiveDateTime=datetime(2019-05-01) . |
updateExtentsCreationTime | bool |
Yalnızca kullanırken backfill ilgili olur. olarak ayarlandıysa true , Kapsam Oluşturma zamanı , geri doldurma işlemi sırasında tarih saat gruplandırma ölçütü anahtarına göre atanır. Daha fazla bilgi için bkz . Gerçekleştirilmiş görünümü geri doldurma. |
lookback | timespan |
Yalnızca gerçekleştirilmiş görünümler için arg_max //arg_min take_any geçerlidir. Yinelemelerin beklendiği süreyi sınırlar. Örneğin, görünümde arg_max 6 saatlik bir geri bakış belirtilirse, yeni alınan kayıtlar ile var olan kayıtlar arasındaki yinelenenleri kaldırma işlemi yalnızca 6 saat öncesine kadar alınan kayıtları dikkate alır. Lookback, ingestion_time() ile görelidir. Gerçekleştirilmiş görünüm sorgusu değeri korumazsa ingestion_time() , görünümde geri arama tanımlanamaz. Gerçekleştirilmiş görünüm sınırlamalarına ve bilinen sorunlara bakın. Geri arama döneminin yanlış tanımlanması, gerçekleştirilmiş görünümde yinelemelere neden olabilir. Örneğin, belirli bir anahtar için bir kayıt, aynı anahtar için bir kayıt alındıktan 10 saat sonra alınırsa ve geri arama 6 saat olarak ayarlanırsa, bu anahtar görünümde yinelenen bir anahtar olur. Geri arama süresi hem gerçekleştirme süresi hem de sorgu süresi sırasında uygulanır. |
autoUpdateSchema | bool |
Kaynak tablo değişikliklerindeki görünümün otomatik olarak güncelleştirilip güncelleştirilmeyeceği. Varsayılan false değeridir. Bu seçenek yalnızca tür arg_max(Timestamp, *) //arg_min(Timestamp, *) take_any(*) görünümleri için geçerlidir (yalnızca sütunun bağımsız değişkeni olduğunda).* Bu seçenek olarak ayarlanırsa true , kaynak tablodaki değişiklikler otomatik olarak gerçekleştirilmiş görünüme yansıtılır. |
dimensionTables | dizi | Görünümde boyut tabloları dizisi içeren dinamik bağımsız değişken. Bkz. Sorgu parametresi. |
kaydetme | string |
Gerçekleştirilmiş görünümün klasörü. |
docString | string |
Gerçekleştirilmiş görünümü belgeleyen bir dize. |
allowMaterializedViewsWithoutRowLevelSecurity | bool |
Satır düzeyi güvenlik ilkesinin etkinleştirildiği bir tablo üzerinde gerçekleştirilmiş görünüm oluşturmaya izin verir. |
Uyarı
- Gerçekleştirilmiş görünümün kaynak tablosunda yapılan değişiklikler veya verilerdeki değişiklikler gerçekleştirilmiş görünüm sorgusu ile beklenen gerçekleştirilmiş görünüm şeması arasında uyumsuzluğa yol açarsa sistem otomatik olarak gerçekleştirilmiş görünümü devre dışı bırakır.
- Bu hatayı önlemek için gerçekleştirilmiş görünüm sorgusunun belirleyici olması gerekir. Örneğin, bag_unpack veya özet eklentisi belirlenemeyen bir şemayla sonuçlanır.
- Toplama kullandığınızda
arg_max(Timestamp, *)
ve yanlış olduğundaautoUpdateSchema
, kaynak tabloda yapılan değişiklikler şema uyuşmazlıklarına da yol açabilir. Görünüm sorgusunu olarakarg_max(Timestamp, Column1, Column2, ...)
tanımlayarak veya seçeneğini kullanarak bu hatayı önleyebilirsinizautoUpdateSchema
. - Kullanmak
autoUpdateSchema
, kaynak tablodaki sütunlar bırakıldığında geri alınamaz veri kaybına neden olabilir. - MaterializedViewResult ölçümünü kullanarak gerçekleştirilmiş görünümlerin otomatik olarak devre dışı bırakıldığını izleyin.
- Uyumsuzluk sorunlarını düzeltdikten sonra, gerçekleştirilmiş görünümü etkinleştir komutunu kullanarak görünümü açıkça yeniden etkinleştirmeniz gerekir.
Gerçekleştirilmiş görünüm üzerinde gerçekleştirilmiş görünüm oluşturma
Başka bir gerçekleştirilmiş görünüm üzerinde ancak kaynak gerçekleştirilmiş görünüm bir toplama (yinelenenleri kaldırma) olduğunda gerçekleştirilmiş görünüm take_any(*)
oluşturabilirsiniz. Daha fazla bilgi için bkz . Gerçekleştirilmiş görünüm üzerinde gerçekleştirilmiş görünüm ve Örnekler.
Söz dizimi:
.create
[async
] [ifnotexists
] materialized-view
[ with
(
PropertyName =
PropertyValue,
...)
] MaterializedViewName SourceMaterializedViewName {
Sorgusu on materialized-view
}
Parametreler:
Adı | Tür | Zorunlu | Açıklama |
---|---|---|---|
PropertyName, PropertyValue | string |
Desteklenen özellikler listesinden ad ve değer çiftleri biçimindeki özelliklerin listesi. | |
MaterializedViewName | string |
✔️ | Gerçekleştirilmiş görünümün adı. Görünüm adı aynı veritabanındaki tablo veya işlev adlarıyla çakışamaz ve tanımlayıcı adlandırma kurallarına uyması gerekir. |
SourceMaterializedViewName | string |
✔️ | Görünümün tanımlandığı kaynak gerçekleştirilmiş görünümün adı. |
Sorgu | string |
✔️ | Gerçekleştirilmiş görünümün sorgu tanımı. |
Örnekler
Şu andan itibaren yalnızca alınan kayıtların gerçekleştirilmesini sağlayacak boş
arg_max
bir görünüm oluşturun:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
kullanarak
async
geri doldurma seçeneğiyle günlük toplamalar için gerçekleştirilmiş bir görünüm oluşturun:.create async materialized-view with (backfill=true, docString="Customer telemetry") CustomerUsage on table T { T | extend Day = bin(Timestamp, 1d) | summarize count(), dcount(User), max(Duration) by Customer, Day }
ve
effectiveDateTime
ilebackfill
gerçekleştirilmiş bir görünüm oluşturun. Görünüm yalnızca tarih saat kayıtlarına göre oluşturulur..create async materialized-view with (backfill=true, effectiveDateTime=datetime(2019-01-01)) CustomerUsage on table T { T | extend Day = bin(Timestamp, 1d) | summarize count(), dcount(User), max(Duration) by Customer, Day }
6 saatlik bir geri arama kullanarak kaynak tabloyu sütuna
EventId
göre yinelenenleri kaldıran gerçekleştirilmiş bir görünüm oluşturun. Kayıtlar, yalnızca geçerli kayıtlara 6 saat önce alınan kayıtlara göre yinelenenleri kaldırılacaktır..create materialized-view with(lookback=6h) DeduplicatedTable on table T { T | summarize take_any(*) by EventId }
Önceki
DeduplicatedTable
gerçekleştirilmiş görünümü temel alan bir downsampling gerçekleştirilmiş görünümü oluşturun:.create materialized-view DailyUsage on materialized-view DeduplicatedTable { DeduplicatedTable | summarize count(), dcount(User) by Day=bin(Timestamp, 1d) }
Tanım, son işleç olduğu sürece
summarize
deyimindensummarize
önce ek işleçler içerebilir:.create materialized-view CustomerUsage on table T { T | where Customer in ("Customer1", "Customer2", "CustomerN") | parse Url with "https://contoso.com/" Api "/" * | extend Month = startofmonth(Timestamp) | summarize count(), dcount(User), max(Duration) by Customer, Api, Month }
Boyut tablosuyla birleştirilen gerçekleştirilmiş görünümler şunlardır:
.create materialized-view with (dimensionTables = dynamic(["DimUsers"])) EnrichedArgMax on table T { T | lookup DimUsers on User | summarize arg_max(Timestamp, *) by User } .create materialized-view with (dimensionTables = dynamic(["DimUsers"])) EnrichedArgMax on table T { DimUsers | project User, Age, Address | join kind=rightouter hint.strategy=broadcast T on User | summarize arg_max(Timestamp, *) by User }
Açıklamalar
Sorgu parametresi
Aşağıdaki kurallar gerçekleştirilmiş görünüm Sorgu parametresinde kullanılan sorguyu sınırlar:
Sorgu, gerçekleştirilmiş görünümün kaynağı olan tek bir olgu tablosuna başvurmalıdır. Tek
summarize
bir işleç ve ifadelere göre bir veya daha fazla grup tarafından toplanan bir veya daha fazla toplama işlevi içermelidir. işlecisummarize
her zaman sorgudaki son işleç olmalıdır.Yalnızca tek
arg_max
//arg_min
take_any
bir toplama içeren gerçekleştirilmiş görünüm, bu toplamaları ve diğer toplamaları (gibiavg
count
/dcount
/) içeren gerçekleştirilmiş görünümden daha iyi performans gösterebilir. Bunun nedeni, bazı iyileştirmelerin yalnızca bu tür gerçekleştirilmiş görünümlerle ilgili olmasıdır. Görünüm karma toplama işlevleri içerdiğinde (karma hem hem detake_any
arg_max
/arg_min
/aynı görünümdeki diğer toplamalar anlamına gelir) bunlar uygulanmaz.Sorgu, öğesine bağımlı
now()
olan işleçler içermemelidir. Örneğin, sorguda olmamalıdırwhere Timestamp > ago(5d)
. Görünümün kapsadığı süreyi sınırlamak için gerçekleştirilmiş görünümde bekletme ilkesini kullanın.Aşağıdaki işleçler gerçekleştirilmiş görünüm sorgusunda desteklenmez:
sort
,top-nested
,top
,partition
, .serialize
Bileşik toplamalar, gerçekleştirilmiş görünümün tanımında desteklenmez. Örneğin, kullanmak
SourceTableName | summarize Result=sum(Column1)/sum(Column2) by Id
yerine gerçekleştirilmiş görünümü olarak tanımlayın:SourceTableName | summarize a=sum(Column1), b=sum(Column2) by Id
. Sorguyu görüntüleme sırasında komutunu çalıştırınMaterializedViewName | project Id, Result=a/b
. Hesaplanan sütun ()a/b
dahil olmak üzere görünümün gerekli çıkışı, depolanan bir işlevde kapsüllenebilir. Gerçekleştirilmiş görünüme doğrudan erişmek yerine depolanan işleve erişin.
- Kümeler arası ve veritabanları arası sorgular desteklenmez.
- Çapraz Eventhouse ve veritabanları arası sorgular desteklenmez.
external_table() ve externaldata başvuruları desteklenmez.
Gerçekleştirilmiş görünüm sorgusu kimliğe bürünme gerektiren belirtme çizgisi içeremez. Özellikle, kimliğe bürünme kullanan tüm sorgu bağlantısı eklentilerine izin verilmez.
Görünümün kaynak tablosuna ek olarak, sorgunun bir veya daha fazla boyut tablosuna başvurmasına izin verilir. Boyut tabloları, görünüm özelliklerinde açıkça çağrılmalıdır. Boyut tablolarına katılırken aşağıdaki davranışı anlamanız önemlidir:
Görünümün kaynak tablosundaki (olgu tablosu) kayıtlar yalnızca bir kez oluşturulur. Boyut tablolarındaki güncelleştirmelerin olgu tablosundan zaten işlenmiş olan kayıtlar üzerinde herhangi bir etkisi yoktur.
Olgu tablosu ile boyut tablosu arasında farklı bir alım gecikmesi görünüm sonuçlarını etkileyebilir.
Örnek: Görünüm tanımı, boyut tablosuyla iç birleşim içerir. Gerçekleştirme sırasında boyut kaydı tam olarak alınmadı, ancak olgu tablosuna zaten alındı. Bu kayıt görünümden bırakılır ve bir daha işlenmez.
Benzer şekilde, birleştirme bir dış birleşimse olgu tablosundaki kayıt işlenir ve boyut tablosu sütunları için null değerle görünüme eklenir. Görünüme zaten eklenmiş olan kayıtlar (null değerlerle) yeniden işlenmez. Boyut tablosundaki sütunlarda değerleri null olarak kalır.
Desteklenen toplama işlevleri
Aşağıdaki toplama işlevleri desteklenir:
count
countif
dcount
dcountif
min
max
avg
avgif
sum
sumif
arg_max
arg_min
take_any
take_anyif
hll
make_set
make_list
make_bag
percentile
,percentiles
tdigest
Performans ipuçları
Bir datetime group-by anahtarı kullanın: Grup ölçütü anahtarlarından biri olarak datetime sütununa sahip gerçekleştirilmiş görünümler, olmayan görünümlerden daha verimlidir. Bunun nedeni, bazı iyileştirmelerin yalnızca bir datetime group-by anahtarı olduğunda uygulanabilmesidir. Bir datetime group-by anahtarı eklemek toplamanızın semantiğini değiştirmezse, bunu eklemenizi öneririz. Bunu yalnızca tarih saat sütunu her benzersiz varlık için sabitse yapabilirsiniz.
Örneğin, aşağıdaki toplamada:
SourceTable | summarize take_any(*) by EventId
Her zaman aynı
Timestamp
değere sahipseEventId
ve bu nedenle eklemeTimestamp
toplamanın semantiğini değiştirmezse, görünümü şu şekilde tanımlamak daha iyidir:SourceTable | summarize take_any(*) by EventId, Timestamp
İpucu
Datetime group-by anahtarında geç gelen veriler gerçekleştirilmiş görünümün performansını olumsuz etkileyebilir. Örneğin, gerçekleştirilmiş bir görünümün gruplandırma ölçütü anahtarlarından biri olarak kullandığını
bin(Timestamp, 1d)
ve kaynak tabloya yeni alınan kayıtların eskiTimestamp
değerlere sahip olduğunu varsayalım. Bu kayıtlar gerçekleştirilmiş görünümü olumsuz etkileyebilir.Kaynak tabloya geç gelen kayıtların alınmasını bekliyorsanız, gerçekleştirilmiş görünümün önbelleğe alma ilkesini buna göre ayarlayın. Örneğin, altı ay önce Timestamp içeren kayıtların kaynak tabloya alınması bekleniyorsa, gerçekleştirme işleminin önceki altı ay için gerçekleştirilmiş görünümü taraması gerekir. Bu süre soğuk önbellekteyse, gerçekleştirme, görünümün performansı üzerinde olumsuz bir etkiye sahip olacak önbellek eksikleri ile karşılaşır.
Bu kadar geç gelen kayıtlar beklenmiyorsa, gerçekleştirilmiş görünüm sorgusunda bu kayıtları filtrelemenizi veya zaman damgası değerlerini geçerli saate göre normalleştirmenizi öneririz.
Geri arama dönemi tanımlama: Senaryonuz için geçerliyse, özellik
lookback
eklemek sorgu performansını önemli ölçüde iyileştirebilir. Ayrıntılar için bkz . Desteklenen özellikler.Gruplandırma ölçütü anahtarları olarak filtrelemek için sık kullanılan sütunları ekleme: Gerçekleştirilmiş görünüm sorguları, gerçekleştirilmiş görünümün gruplandırma anahtarlarından biri tarafından filtrelendiğinde en iyi duruma getirilir. Sorgu deseninizin genellikle gerçekleştirilmiş görünümdeki benzersiz bir varlığa göre sabit bir sütuna göre filtrelediğini biliyorsanız, bunu gerçekleştirilmiş görünümün gruplandırma anahtarlarına ekleyin.
Örneğin, gerçekleştirilmiş görünüm genellikle tarafından filtrelenecek bir
ResourceId
değere göreSubscriptionId
kullanıma sunararg_max
. BirResourceId
değerin her zaman aynıSubscriptionId
değere ait olduğunu varsayarsak, gerçekleştirilmiş görünüm sorgusunu şu şekilde tanımlayın:.create materialized-view ArgMaxResourceId on table FactResources { FactResources | summarize arg_max(Timestamp, *) by SubscriptionId, ResourceId }
Yukarıdaki tanım aşağıdakilere göre tercih edilir:
.create materialized-view ArgMaxResourceId on table FactResources { FactResources | summarize arg_max(Timestamp, *) by ResourceId }
Uygun durumlarda güncelleştirme ilkelerini kullanın: Gerçekleştirilmiş görünüm boyut tablolarındaki dönüştürmeleri, normalleştirmeleri ve aramaları içerebilir. Ancak, bu işlemleri bir güncelleştirme ilkesine taşımanızı öneririz. Yalnızca gerçekleştirilmiş görünüm için toplamayı bırakın.
Örneğin, aşağıdaki güncelleştirme ilkesini tanımlamak daha iyidir:
.alter-merge table Target policy update @'[{"IsEnabled": true, "Source": "SourceTable", "Query": "SourceTable | extend ResourceId = strcat('subscriptions/', toupper(SubscriptionId), '/', resourceId)", | lookup DimResources on ResourceId | mv-expand Events "IsTransactional": false}]'
Ve aşağıdaki gerçekleştirilmiş görünümü tanımlayın:
.create materialized-view Usage on table Events { Target | summarize count() by ResourceId }
Alternatif olarak, güncelleştirme ilkesini gerçekleştirilmiş görünüm sorgusunun bir parçası olarak dahil etme, daha kötü bir performans gösterebilir ve bu nedenle önerilmez:
.create materialized-view Usage on table SourceTable { SourceTable | extend ResourceId = strcat('subscriptions/', toupper(SubscriptionId), '/', resourceId) | lookup DimResources on ResourceId | mv-expand Events | summarize count() by ResourceId }
İpucu
En iyi sorgu süresi performansına ihtiyacınız varsa ancak bazı veri gecikme sürelerine tolerans gösterebiliyorsanız materialized_view() işlevini kullanın.
Gerçekleştirilmiş görünümü doldurma
özelliğini kullanarak backfill
gerçekleştirilmiş görünüm oluştururken, gerçekleştirilmiş görünüm kaynak tabloda bulunan kayıtlara göre oluşturulur. Veya kullanıyorsanız effectiveDateTime
, bu kayıtların bir alt kümesine göre oluşturulur.
Arka planda, geri doldurma işlemi verileri birden fazla toplu işleme böler ve görünümü doldurmak için birkaç alma işlemi yürütür. Kaynak tablodaki kayıt sayısı büyük olduğunda işlemin tamamlanması uzun sürebilir. İşlem süresi veritabanı boyutuna bağlıdır. komutunu kullanarak geri doldurma işleminin ilerleme durumunu .show operations
izleyin.
Geri doldurma işleminin bir parçası olarak oluşan geçici hatalar yeniden deneniyor. Tüm yeniden denemeler tükenirse, komut başarısız olur ve create komutunun el ile yeniden yürütülmesini gerektirir.
Kaynak tablodaki kayıt sayısı aşıldığında number-of-nodes X 200 million
(sorgunun karmaşıklık düzeyine bağlı olarak bazen daha az) geri doldurma kullanmanızı önermeyiz. Alternatif olarak, kapsamları taşı seçeneğine göre geri doldurma seçeneği bulunur .
Geri doldurma seçeneğinin kullanılması, soğuk önbellekteki veriler için desteklenmez. Gerekirse, görünüm oluşturma süresi boyunca sık erişimli önbellek süresini artırın. Bu, ölçeği genişletmeyi gerektirebilir.
Görünüm oluşturmada hatalarla karşılaşırsanız şu özellikleri değiştirmeyi deneyin:
MaxSourceRecordsForSingleIngest
: Varsayılan olarak, geri doldurma sırasında her alma işlemindeki kaynak kayıtların sayısı düğüm başına 2 milyondur. Bu özelliği istenen kayıt sayısına ayarlayarak bu varsayılan ayarı değiştirebilirsiniz. (Değer, her alma işlemindeki toplam kayıt sayısıdır.)Bellek sınırlarında veya sorgu zaman aşımlarında oluşturma başarısız olduğunda bu değerin azaltılması yararlı olabilir. Veritabanının toplama işlevini varsayılandan daha fazla kayıtta yürütebildiği varsayılarak bu değerin artırılması görünüm oluşturmayı hızlandırabilir.
Concurrency
: Geri doldurma işleminin bir parçası olarak çalışan alma işlemleri eşzamanlı olarak çalıştırılır. Eşzamanlılık varsayılan olarak şeklindedirmin(number_of_nodes * 2, 5)
. Eşzamanlılığı artırmak veya azaltmak için bu özelliği ayarlayabilirsiniz. Bu değerin yalnızca veri tabanının CPU'sunun düşük olması durumunda artırılmasını öneririz çünkü bu artış veritabanının CPU tüketimini önemli ölçüde etkileyebilir.
Örneğin, aşağıdaki komut uygulamasından 2020-01-01
gerçekleştirilmiş görünümü doldurur. Her alma işleminde maksimum kayıt sayısı 3 milyondur. komutu, eşzamanlılığı 2
ile alma işlemlerini yürütür.
.create async materialized-view with (
backfill=true,
effectiveDateTime=datetime(2020-01-01),
MaxSourceRecordsForSingleIngest=3000000,
Concurrency=2
)
CustomerUsage on table T
{
T
| summarize count(), dcount(User), max(Duration) by Customer, bin(Timestamp, 1d)
}
Gerçekleştirilmiş görünümde bir datetime group-by anahtarı varsa, geri doldurma işlemi tarih saat sütununa göre kapsam oluşturma zamanını geçersiz kılmayı destekler. Bu, örneğin eski kayıtların son kayıtlardan önce bırakılmasını istiyorsanız yararlı olabilir çünkü bekletme ilkesi kapsam oluşturma zamanına dayanır. updateExtentsCreationTime
özelliği yalnızca görünümde işlevini kullanan bin()
bir datetime group-by anahtarı varsa desteklenir. Örneğin, aşağıdaki yedekleme grubu oluşturma süresini gruplandırma anahtarına Timestamp
göre atar:
.create async materialized-view with (
backfill=true,
updateExtentsCreationTime=true
)
CustomerUsage on table T
{
T
| summarize count() by Customer, bin(Timestamp, 1d)
}
Taşıma kapsamlarına göre doldurma
Taşıma kapsamlarına göre geri doldurma seçeneği, gerçekleştirilmiş görünümün kaynak tablosu olması gerekmeyecek olan mevcut bir tabloyu temel alarak gerçekleştirilmiş görünümü doldurur. Kapsamları belirtilen tablodan temel alınan gerçekleştirilmiş görünüm tablosuna taşıyarak geri doldurmaya ulaşırsınız. Bu işlem şunu ifade eder:
- Belirtilen tablodaki verilerin gerçekleştirilmiş görünüm şemasıyla aynı şemaya sahip olması gerekir.
- Belirtilen tablodaki kayıtlar olduğu gibi görünüme taşınır. Gerçekleştirilmiş görünümün tanımına göre yinelenenleri kaldırıldığı varsayılır.
Örneğin, gerçekleştirilmiş görünümde aşağıdaki toplama varsa:
T | summarize arg_max(Timestamp, *) by EventId
Ardından, taşıma kapsamları işlemi için kaynak tablodaki kayıtlar tarafından EventID
zaten yinelenenleri kaldırılmalıdır.
İşlem .move kapsamlarını kullandığından, kayıtlar dolum sırasında belirtilen tablodan kaldırılır (kopyalanmaz, taşındı).
Taşıma kapsamlarına göre yedekleme, gerçekleştirilmiş görünümlerde desteklenen tüm toplama işlevleri için desteklenmez. Görünümde depolanan temel verilerin toplamanın kendisinden farklı olduğu , dcount()
gibi avg()
toplamalar için başarısız olur.
Gerçekleştirilmiş görünüm yalnızca belirtilen tabloya göre doldurulur. Görünümün kaynak tablosundaki kayıtların gerçekleştirilmesi varsayılan olarak görünüm oluşturma zamanından başlar.
Gerçekleştirilmiş görünümün kaynak tablosu sürekli veri alıyorsa, taşıma kapsamlarını kullanarak görünümü oluşturmak veri kaybına neden olabilir. Bunun nedeni, kaynak tabloya alınan kayıtların, tabloyu yedeklenecek şekilde hazırlama zamanı ile görünümün oluşturulduğu süre arasındaki kısa sürede gerçekleştirilmiş görünüme dahil edilmemesidir. Bu senaryoyu source_ingestion_time_from
işlemek için, özelliğini kaynak tablo üzerinden gerçekleştirilmiş görünümün başlangıç zamanına ayarlayabilirsiniz.
Kullanım örnekleri
Taşıma kapsamlarına göre yedekleme seçeneği iki ana senaryoda yararlı olabilir:
Gerçekleştirilmiş görünümün yinelenenleri kaldırılmış kaynak verilerini içeren bir tablonuz varsa ve yalnızca gerçekleştirilmiş görünümü kullandığınız için görünüm oluşturulduktan sonra bu tabloda bu kayıtlara ihtiyacınız yoksa.
Gerçekleştirilmiş görünümün kaynak tablosu çok büyük olduğunda ve daha önce bahsedilen sınırlamalar nedeniyle kaynak tabloyu temel alan görünümün yedeklenmesi iyi çalışmaz. Bu durumda, sorgu komutlarından alma komutunu kullanarak geri doldurma işlemini kendiniz geçici bir tablo halinde düzenleyebilirsiniz. Geçici tablo, dolgu için tüm kayıtları içerdiğinde, bu tabloyu temel alan gerçekleştirilmiş görünümü oluşturun.
Örnekler:
Aşağıdaki örnekte tablo
DeduplicatedTable
örnek başınaEventId
tek bir kayıt içerir ve gerçekleştirilmiş görünümün temeli olarak kullanılacaktır. Yalnızca görünüm oluşturma zamanından sonra alınan içindeki kayıtlarT
gerçekleştirilmiş görünüme eklenir..create async materialized-view with (move_extents_from=DeduplicatedTable) MV on table T { T | summarize arg_max(Timestamp, *) by EventId }
effectiveDateTime
Özellik özelliğiylemove_extents_from
birlikte belirtilirse, yalnızca değeri dahaeffectiveDateTime
büyük olanMaxCreatedOn
uzantılarDeduplicatedTable
geri doldurmaya dahil edilir (gerçekleştirilmiş görünüme taşınır):.create async materialized-view with (move_extents_from=DeduplicatedTable, effectiveDateTime=datetime(2019-01-01)) MV on table T { T | summarize arg_max(Timestamp, *) by EventId }
Aşağıdaki örnek, taşıma kapsamlarına göre yedekleme seçeneğinde özelliğinin kullanımını
source_ingestion_time_from
gösterir. hem hemmove_extents_from
desource_ingestion_time_from
kullanılarak gerçekleştirilmiş görünümün iki kaynaktan yedeklendiği gösterilir:Tablo
move_extents_from
:DeduplicatedTable
Aşağıdaki örnekte. Bu tablo, yedeklenmesi gereken tüm geçmiş verileri içermelidir. İsteğe bağlı olarak değerinin değerindeneffectiveDateTime
büyükeffectiveDateTime
olanMaxCreatedOn
uzantılarıDeduplicatedTable
eklemek için özelliğini kullanabilirsiniz.Gerçekleştirilmiş görünümün kaynak tablosu:
T
aşağıdaki örnekte. Bu tablodan geri doldurma yalnızca ingestion_time() değeri değerindensource_ingestion_time_from
büyük olan kayıtları içerir.source_ingestion_time_from
özelliği yalnızca () ile görünümün oluşturulma zamanı arasındaki kısa sürede olası veri kaybını işlemek içinDeduplicatedTable
kullanılmalıdır. Bu özelliği geçmişte çok fazla ayarlamayın. Bu, gerçekleştirilmiş görünümü önemli bir gecikmeyle başlatır ve bu da yetişmesi zor olabilir.
Aşağıdaki örnekte geçerli saatin olduğunu
2020-01-01 03:00
varsayalım. TabloDeduplicatedTable
, yinelenenleri kaldırılmış bir tablosudurT
. Kadar yinelenenleri kaldırılmış2020-01-01 00:00
tüm geçmiş verileri içerir. komutu taşımacreate
kapsamlarını kullanarak gerçekleştirilmiş görünümü geri doldurmak için kullanırDeduplicatedTable
. komutu,create
içinde bu tarihten sonra2020-01-01
alınan tüm kayıtlarıT
da içerir..create async materialized-view with (move_extents_from=DeduplicatedTable, source_ingestion_time_from=datetime(2020-01-01)) MV on table T { T | summarize arg_max(Timestamp, *) by EventId }
Gerçekleştirilmiş görünüm oluşturmayı iptal etme
Geri doldurma seçeneğini kullanırken gerçekleştirilmiş görünüm oluşturma işlemini iptal edebilirsiniz. Bu eylem, oluşturma işlemi çok uzun sürdüğünde ve çalışırken durdurmak istediğinizde kullanışlıdır.
Uyarı
Bu komutu çalıştırdıktan sonra gerçekleştirilmiş görünüm geri yüklenemez.
Oluşturma işlemi hemen iptal edilemiyor. İptal komutu durdurulmak için gerçekleştirmeye işaret eder ve oluşturma işlemi düzenli aralıklarla iptal istenip istenmediğini denetler. İptal komutu, gerçekleştirilmiş görünüm oluşturma işlemi iptal edilene kadar en fazla 10 dakika bekler ve iptalin başarılı olup olmadığını bildirir.
İptal işlemi 10 dakika içinde başarılı olmazsa ve iptal komutu başarısız olduğunu bildirse bile, gerçekleştirilmiş görünüm büyük olasılıkla oluşturma işleminin ilerleyen bölümlerinde kendisini iptal eder. komutu, .show operations
işlemin iptal edilip iptal edilmediğini belirtir.
Komut verildiğinde .cancel operation
işlem devam etmekte değilse, komut bunu söyleyen bir hata bildirir.
Sözdizimi
.cancel operation
operationId
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Zorunlu | Açıklama |
---|---|---|---|
operationId |
guid |
✔️ | Komuttan .create async materialized-view döndürülen işlem kimliği. |
Çıktı
Ad | Tür | Açıklama |
---|---|---|
OperationId | guid |
Komutun .create materialized-view işlem kimliği. |
İşlem | string |
İşlemin türü. |
StartedOn | datetime |
Oluşturma işleminin başlangıç saati. |
CancellationState | string |
Bunlardan biri: Canceled successfully (oluşturma iptal edildi), Cancellation failed (iptalin zaman aşımına uğramasını bekleyin), Unknown (görünüm oluşturma işlemi artık çalışmıyor ancak bu işlem tarafından iptal edilemedi). |
ReasonPhrase | string |
İptal işleminin başarılı olmamasının nedeni. |
Örnekler
.cancel operation c4b29441-4873-4e36-8310-c631c35c916e
OperationId | İşlem | StartedOn | CancellationState | ReasonPhrase |
---|---|---|---|---|
c4b29441-4873-4e36-8310-c631c35c916e |
MaterializedViewCreateOrAlter |
2020-05-08 19:45:03.9184142 |
Canceled successfully |
İptal işleminin 10 dakika içinde tamamlanmamışsa başarısız CancellationState
olduğu belirtilir. Oluşturma işlemi iptal edilebilir.