Aracılığıyla paylaş


.create materialized-view

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 SourceTabletruebulunan 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 backfillilgili 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 backfillilgili 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_mintake_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, ile ingestion_timegörelidir. 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ğunda autoUpdateSchema , kaynak tabloda yapılan değişiklikler şema uyuşmazlıklarına da yol açabilir. Görünüm sorgusunu olarak arg_max(Timestamp, Column1, Column2, ...)tanımlayarak veya seçeneğini kullanarak bu hatayı önleyebilirsiniz autoUpdateSchema .
  • 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 asyncgeri 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 effectiveDateTimeile backfill 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 deyiminden summarize ö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şleci summarize her zaman sorgudaki son işleç olmalıdır.

    Yalnızca tek arg_max//arg_mintake_any bir toplama içeren gerçekleştirilmiş görünüm, bu toplamaları ve diğer toplamaları (gibiavgcount/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ır where 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 Idyerine 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ın MaterializedViewName | 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.

  • 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:

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 sahipse EventId ve bu nedenle ekleme Timestamp 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 verilerdeki çeşitli aykırı değerlerin çok eski Timestamp değerlere sahip olduğunu varsayalım. Bu aykırı değerler gerçekleştirilmiş görünümü olumsuz etkileyebilir.

    Gerçekleştirilmiş görünüm sorgusunda aykırı değerleri filtrelemenizi veya bu kayıtları geçerli saate 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öre SubscriptionIdkullanıma sunararg_max. Bir ResourceId 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 küme 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. Kümenin 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 şeklindedir min(number_of_nodes * 2, 5). Eşzamanlılığı artırmak veya azaltmak için bu özelliği ayarlayabilirsiniz. Bu değeri yalnızca kümenin CPU'sunun düşük olması durumunda artırmanızı öneririz, çünkü artış kümenin CPU tüketimini önemli ölçüde etkileyebilir.

Örneğin, aşağıdaki komut uygulamasından 2020-01-01gerçekleştirilmiş görünümü doldurur. Her alma işleminde maksimum kayıt sayısı 3 milyondur. komutu, eşzamanlılığı 2ile 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 EventIDzaten 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 ve önerilen düzenleme araçlarından birini kullanarak geri doldurma işlemini kendiniz geçici bir tabloda 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şına EventId 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ıtlar T 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ğiyle move_extents_from birlikte belirtilirse, yalnızca değeri daha effectiveDateTime büyük olan MaxCreatedOn uzantılar DeduplicatedTable 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 hem move_extents_from de source_ingestion_time_from kullanılarak gerçekleştirilmiş görünümün iki kaynaktan yedeklendiği gösterilir:

    • Tablomove_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ğerinden effectiveDateTime büyük effectiveDateTimeolan MaxCreatedOn 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ğerinden source_ingestion_time_frombü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:00varsayalım. Tablo DeduplicatedTable , yinelenenleri kaldırılmış bir tablosudur T. Kadar yinelenenleri kaldırılmış 2020-01-01 00:00tüm geçmiş verileri içerir. komutu taşıma create kapsamlarını kullanarak gerçekleştirilmiş görünümü geri doldurmak için kullanır DeduplicatedTable . komutu, create içinde bu tarihten sonra 2020-01-01alı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 operationoperationId

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.