Bagikan melalui


.create materialized-view

Tampilan materialisasi adalah kueri agregasi melalui tabel sumber. Ini mewakili satu summarize pernyataan.

Ada dua cara yang mungkin untuk membuat tampilan materialisasi, seperti yang dicatat oleh opsi isi ulang dalam perintah:

Buat tampilan materialisasi mulai sekarang dan seterusnya:

  • Tampilan materialisasi dibuat kosong. Ini hanya mencakup rekaman yang diserap setelah pembuatan tampilan. Pembuatan jenis ini segera kembali, dan tampilan segera tersedia untuk kueri.

Membuat tampilan materialisasi berdasarkan rekaman yang telah ada dalam tabel sumber:

  • Lihat Mengisi ulang tampilan materialisasi.
  • Pembuatan mungkin memakan waktu lama untuk diselesaikan, tergantung pada jumlah rekaman dalam tabel sumber. Tampilan tidak akan tersedia untuk kueri hingga backfill selesai.
  • Saat Anda menggunakan opsi ini, perintah buat harus async. Anda dapat memantau eksekusi dengan menggunakan .show operations perintah .
  • Anda dapat membatalkan proses isi ulang dengan menggunakan .cancel operation perintah .

Penting

Pada tabel sumber besar, opsi isi ulang mungkin membutuhkan waktu lama untuk diselesaikan. Jika proses ini gagal sementara saat berjalan, proses ini tidak akan dicoba ulang secara otomatis. Anda kemudian harus menjalankan kembali perintah pembuatan. Untuk informasi selengkapnya, lihat Mengisi ulang tampilan materialisasi.

Izin

Perintah ini memerlukan izin database Admin. Pembuat tampilan materialisasi menjadi adminnya.

Sintaks

.create [async] [ifnotexists] materialized-view [ with(PropertyName=PropertyValue,...)] MaterializedViewNameon tableSourceTableName{Query}

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan Deskripsi
PropertyName, PropertyValue string Daftar properti dalam bentuk pasangan nama dan nilai, dari daftar properti yang didukung.
MaterializedViewName string ✔️ Nama tampilan yang dimaterialisasi. Nama tampilan tidak dapat bertentangan dengan nama tabel atau fungsi dalam database yang sama dan harus mematuhi aturan penamaan pengidentifikasi.
SourceTableName string ✔️ Nama tabel sumber tempat tampilan didefinisikan.
Kueri string ✔️ Definisi kueri dari tampilan terwujud. Untuk informasi dan batasan selengkapnya, lihat Bagian parameter kueri .

Catatan

Jika tampilan materialisasi sudah ada:

  • ifnotexists Jika bendera ditentukan, perintah akan diabaikan. Tidak ada perubahan yang diterapkan, meskipun definisi baru tidak cocok dengan definisi yang ada.
  • ifnotexists Jika bendera tidak ditentukan, kesalahan akan dikembalikan.
  • Untuk mengubah tampilan materialisasi yang ada, gunakan perintah .alter materialized-view .

Properti yang didukung

Properti berikut ini didukung dalam with( klausa PropertyName=PropertyValue). Semua properti bersifat opsional.

Nama Jenis Deskripsi
backfill bool Apakah akan membuat tampilan berdasarkan semua rekaman yang saat ini ada di SourceTable (true), atau membuatnya mulai sekarang (false). Defaultnya adalah false. Untuk informasi selengkapnya, lihat Mengisi ulang tampilan materialisasi.
effectiveDateTime datetime Hanya relevan saat Anda menggunakan backfill. Jika diatur, buat backfills hanya dengan rekaman yang diserap setelah tanggalwaktu. backfill juga harus diatur ke true. Properti ini mengharapkan harfiah tanggalwaktu; misalnya, effectiveDateTime=datetime(2019-05-01).
updateExtentsCreationTime bool Hanya relevan saat Anda menggunakan backfill. Jika diatur ke true, Waktu pembuatan jangka waktu ditetapkan berdasarkan kunci grup-menurut tanggalwaktu selama proses isi ulang. Untuk informasi selengkapnya, lihat Mengisi ulang tampilan materialisasi.
lookback timespan Hanya berlaku untuk arg_max//arg_mintake_any tampilan materialisasi. Ini membatasi periode waktu di mana duplikat diharapkan. Misalnya, jika lookback 6 jam ditentukan pada arg_max tampilan, deduplikasi antara rekaman yang baru diserap dan yang sudah ada hanya akan mempertimbangkan rekaman yang diserap hingga 6 jam yang lalu.

Lookback relatif terhadap ingestion_time. Menentukan periode lookback secara tidak benar dapat menyebabkan duplikat dalam tampilan materialisasi. Misalnya, jika rekaman untuk kunci tertentu diserap 10 jam setelah rekaman untuk kunci yang sama diserap, dan lookback diatur ke 6 jam, kunci tersebut akan menjadi duplikat dalam tampilan. Periode lookback diterapkan selama waktu materialisasi dan waktu kueri.
autoUpdateSchema bool Apakah akan memperbarui tampilan secara otomatis pada perubahan tabel sumber. Defaultnya adalah false. Opsi ini hanya valid untuk tampilan jenis arg_max(Timestamp, *)//arg_min(Timestamp, *)take_any(*) (hanya ketika argumen kolom adalah ).* Jika opsi ini diatur ke true, perubahan pada tabel sumber akan secara otomatis tercermin dalam tampilan terwujud.
dimensionTables array Argumen dinamis yang menyertakan array tabel dimensi dalam tampilan. Lihat Parameter kueri.
folder string Folder tampilan materialisasi.
docString string String yang mendanai tampilan materialisasi.
allowMaterializedViewsWithoutRowLevelSecurity bool Memungkinkan pembuatan tampilan materialisasi di atas tabel dengan kebijakan keamanan tingkat baris diaktifkan.

Peringatan

  • Sistem akan secara otomatis menonaktifkan tampilan materialisasi jika berubah pada tabel sumber tampilan materialisasi, atau perubahan data, menyebabkan ketidakcocokan antara kueri tampilan materialisasi dan skema tampilan materialisasi yang diharapkan.
  • Untuk menghindari kesalahan ini, kueri tampilan materialisasi harus deterministik. Misalnya, plugin bag_unpack atau pivot menghasilkan skema non-deterministik.
  • Saat Anda menggunakan agregasi arg_max(Timestamp, *) dan kapan autoUpdateSchema false, perubahan pada tabel sumber juga dapat menyebabkan ketidakcocokan skema. Hindari kegagalan ini dengan menentukan kueri tampilan sebagai arg_max(Timestamp, Column1, Column2, ...), atau dengan menggunakan opsi autoUpdateSchema.
  • Penggunaan autoUpdateSchema mungkin menyebabkan kehilangan data yang tidak dapat diubah saat kolom dalam tabel sumber dihilangkan.
  • Pantau pennonaktifkan otomatis tampilan materialisasi dengan menggunakan metrik MaterializedViewResult.
  • Setelah memperbaiki masalah ketidakkompibilan, Anda harus secara eksplisit mengaktifkan kembali tampilan dengan menggunakan perintah aktifkan tampilan terwujud .

Membuat tampilan materialisasi melalui tampilan materialisasi

Anda dapat membuat tampilan materialisasi melalui tampilan materialisasi lain hanya ketika tampilan materialisasi sumber adalah agregasi take_any(*) (deduplikasi). Untuk informasi selengkapnya, lihat Tampilan materialisasi atas tampilan materialisasi dan Contoh.

Sintaks:

.create [async] [ifnotexists] materialized-view [ with(PropertyName=PropertyValue,...)] MaterializedViewNameon materialized-viewSourceMaterializedViewName{Query}

Parameter:

Nama Jenis Diperlukan Deskripsi
PropertyName, PropertyValue string Daftar properti dalam bentuk pasangan nama dan nilai, dari daftar properti yang didukung.
MaterializedViewName string ✔️ Nama tampilan yang dimaterialisasi. Nama tampilan tidak dapat bertentangan dengan nama tabel atau fungsi dalam database yang sama dan harus mematuhi aturan penamaan pengidentifikasi.
SourceMaterializedViewName string ✔️ Nama tampilan terwujud sumber tempat tampilan ditentukan.
Kueri string ✔️ Definisi kueri dari tampilan terwujud.

Contoh

  • Buat tampilan kosong arg_max yang hanya akan mewujudkan rekaman yang diserap mulai sekarang:

    .create materialized-view ArgMax on table T
    {
        T | summarize arg_max(Timestamp, *) by User
    }
    
  • Buat tampilan materialisasi untuk agregat harian dengan opsi isi ulang, dengan menggunakan async:

    .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 
    } 
    
  • Buat tampilan materialisasi dengan backfill dan effectiveDateTime. Tampilan dibuat berdasarkan rekaman dari tanggalwaktu saja.

    .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
    } 
    
  • Buat tampilan materialisasi yang mendeduplikasi tabel sumber, berdasarkan EventId kolom, dengan menggunakan lookback 6 jam. Rekaman akan dideduplikasi hanya terhadap rekaman yang diserap 6 jam sebelum rekaman saat ini.

    .create materialized-view with(lookback=6h) DeduplicatedTable on table T
    {
        T
        | summarize take_any(*) by EventId
    }
    
  • Buat tampilan materialisasi downsampling yang didasarkan pada tampilan materialisasi sebelumnya DeduplicatedTable :

    .create materialized-view DailyUsage on materialized-view DeduplicatedTable
    {
        DeduplicatedTable
        | summarize count(), dcount(User) by Day=bin(Timestamp, 1d)
    }
    
  • Definisi dapat mencakup operator tambahan sebelum summarize pernyataan , selama summarize yang terakhir:

    .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
    }
    
  • Berikut adalah tampilan materialisasi yang bergabung dengan tabel dimensi:

    .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 
    }
    

Keterangan

Parameter kueri

Aturan berikut membatasi kueri yang digunakan dalam parameter Kueri tampilan materialisasi:

  • Kueri harus mereferensikan tabel fakta tunggal yang merupakan sumber tampilan terwujud. Ini harus mencakup satu summarize operator, dan satu atau beberapa fungsi agregasi dikumpulkan oleh satu atau beberapa grup menurut ekspresi. Operator summarize harus selalu menjadi operator terakhir dalam kueri.

    Tampilan materialisasi yang hanya mencakup satu arg_maxarg_mintake_any//agregasi mungkin berkinerja lebih baik daripada tampilan materialisasi yang mencakup agregasi ini bersama dengan agregasi lain (seperti ).count/dcount/avg Ini karena beberapa pengoptimalan hanya relevan dengan tampilan terwujud semacam ini. Mereka tidak berlaku saat tampilan menyertakan fungsi agregasi campuran (di mana campuran berarti baik arg_max//arg_mintake_any dan agregasi lainnya dalam tampilan yang sama).

  • Kueri tidak boleh menyertakan operator yang bergantung pada now(). Misalnya, kueri tidak boleh memiliki where Timestamp > ago(5d). Gunakan kebijakan penyimpanan pada tampilan materialisasi untuk membatasi periode waktu yang dicakup tampilan.

  • Operator berikut tidak didukung dalam kueri tampilan materialisasi: sort, , top-nestedtop, partition, serialize.

  • Agregasi komposit tidak didukung dalam definisi tampilan materialisasi. Misalnya, alih-alih menggunakan SourceTableName | summarize Result=sum(Column1)/sum(Column2) by Id, tentukan tampilan materialisasi sebagai: SourceTableName | summarize a=sum(Column1), b=sum(Column2) by Id. Selama waktu kueri tampilan, jalankan MaterializedViewName | project Id, Result=a/b. Output tampilan yang diperlukan, termasuk kolom terhitung (a/b), dapat dienkapsulasi dalam fungsi tersimpan. Akses fungsi yang disimpan, bukan mengakses tampilan materialisasi secara langsung.

  • Kueri lintas kluster dan lintas database tidak didukung.

  • Referensi ke external_table() dan externaldata tidak didukung.

  • Kueri tampilan materialisasi tidak dapat menyertakan callout apa pun yang memerlukan peniruan. Secara khusus, semua plugin konektivitas kueri yang menggunakan peniruan identitas tidak diizinkan.

  • Selain tabel sumber tampilan, kueri diizinkan untuk mereferensikan satu atau beberapa tabel dimensi. Tabel dimensi harus dipanggil secara eksplisit di properti tampilan. Penting untuk memahami perilaku berikut saat Anda bergabung dengan tabel dimensi:

    • Rekaman dalam tabel sumber tampilan (tabel fakta) hanya terwujud sekali. Updates ke tabel dimensi tidak berdampak pada rekaman yang telah diproses dari tabel fakta.

    • Latensi penyerapan yang berbeda antara tabel fakta dan tabel dimensi mungkin memengaruhi hasil tampilan.

      Contoh: Definisi tampilan menyertakan gabungan dalam dengan tabel dimensi. Pada saat materialisasi, rekaman dimensi tidak sepenuhnya diserap, tetapi sudah diserap ke dalam tabel fakta. Rekaman ini akan dihilangkan dari tampilan dan tidak pernah diproses lagi.

      Demikian pula, jika gabungan adalah gabungan luar, rekaman dari tabel fakta akan diproses dan ditambahkan ke tampilan dengan nilai null untuk kolom tabel dimensi. Rekaman yang telah ditambahkan (dengan nilai null) ke tampilan tidak akan diproses lagi. Nilainya, dalam kolom dari tabel dimensi, akan tetap null.

Fungsi agregasi yang didukung

Fungsi agregasi berikut didukung:

Tips performa

  • Gunakan kunci grup menurut tanggalwaktu: Tampilan terwujud yang memiliki kolom tanggalwaktu sebagai salah satu kunci grup demi grupnya lebih efisien daripada yang tidak. Alasannya adalah bahwa beberapa pengoptimalan hanya dapat diterapkan ketika ada kunci kelompok berdasarkan tanggalwaktu. Jika menambahkan kunci grup menurut tanggalwaktu tidak mengubah semantik agregasi Anda, kami sarankan Anda menambahkannya. Anda hanya dapat melakukan ini jika kolom tanggalwaktu tidak dapat diubah untuk setiap entitas unik.

    Misalnya, dalam agregasi berikut:

        SourceTable | summarize take_any(*) by EventId
    

    Jika EventId selalu memiliki nilai yang sama Timestamp , dan karena itu menambahkan Timestamp tidak mengubah semantik agregasi, lebih baik menentukan tampilan sebagai:

        SourceTable | summarize take_any(*) by EventId, Timestamp
    

    Tip

    Data yang terlambat tiba dalam kunci grup menurut tanggalwaktu dapat berdampak negatif pada performa tampilan yang terwujud. Misalnya, asumsikan bin(Timestamp, 1d) bahwa tampilan materialisasi menggunakan sebagai salah satu kunci kelompok menurut, dan beberapa outlier dalam data memiliki nilai yang sangat lama Timestamp . Outlier ini mungkin berdampak negatif pada tampilan materialisasi.

    Kami menyarankan agar dalam kueri tampilan terwujud, Anda memfilter rekaman outlier atau menormalkan rekaman ini ke waktu saat ini.

  • Tentukan periode lookback: Jika berlaku untuk skenario Anda, menambahkan lookback properti dapat secara signifikan meningkatkan performa kueri. Untuk detailnya, lihat Properti yang didukung.

  • Tambahkan kolom yang sering digunakan untuk pemfilteran sebagai kunci grup menurut: Kueri tampilan materialisasi dioptimalkan saat difilter oleh salah satu kunci grup menurut tampilan materialisasi. Jika Anda tahu bahwa pola kueri Anda akan sering memfilter menurut kolom yang tidak dapat diubah sesuai dengan entitas unik dalam tampilan terwujud, sertakan dalam tampilan materialisasi yang dikelompokkan menurut kunci.

    Misalnya, tampilan materialisasi diekspos arg_max oleh ResourceId nilai yang akan sering difilter oleh SubscriptionId. Dengan asumsi bahwa ResourceId nilai selalu termasuk dalam nilai yang sama SubscriptionId , tentukan kueri tampilan materialisasi sebagai:

    .create materialized-view ArgMaxResourceId on table FactResources
    {
        FactResources | summarize arg_max(Timestamp, *) by SubscriptionId, ResourceId 
    }
    

    Definisi sebelumnya lebih disukai daripada yang berikut ini:

    .create materialized-view ArgMaxResourceId on table FactResources
    {
        FactResources | summarize arg_max(Timestamp, *) by ResourceId 
    }
    
  • Gunakan kebijakan pembaruan jika sesuai: Tampilan materialisasi dapat mencakup transformasi, normalisasi, dan pencarian dalam tabel dimensi. Namun, kami sarankan Anda memindahkan operasi ini ke kebijakan pembaruan. Biarkan hanya agregasi untuk tampilan terwujud.

    Misalnya, lebih baik menentukan kebijakan pembaruan berikut:

    .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}]'  
    

    Dan tentukan tampilan materialisasi berikut:

    .create materialized-view Usage on table Events
    {
        Target 
        | summarize count() by ResourceId 
    }
    

    Alternatifnya, termasuk kebijakan pembaruan sebagai bagian dari kueri tampilan materialisasi, mungkin berkinerja lebih buruk dan karenanya tidak disarankan:

    .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
    }
    

Tip

Jika Anda memerlukan performa waktu kueri terbaik, tetapi Anda dapat mentolerir beberapa latensi data, gunakan fungsi materialized_view().

Mem-backfill tampilan materialisasi

Saat Anda membuat tampilan materialisasi dengan menggunakan backfill properti , tampilan materialisasi akan dibuat berdasarkan rekaman yang tersedia di tabel sumber. Atau akan dibuat berdasarkan subset rekaman tersebut, jika Anda menggunakan effectiveDateTime.

Di balik layar, proses backfill membagi data untuk di-backfill ke dalam beberapa batch dan menjalankan beberapa operasi penyerapan untuk mem-backfill tampilan. Proses ini mungkin memakan waktu lama untuk diselesaikan ketika jumlah rekaman dalam tabel sumber besar. Durasi proses bergantung pada ukuran kluster. Lacak kemajuan isi ulang dengan menggunakan .show operations perintah .

Kegagalan sementara yang terjadi sebagai bagian dari proses backfill akan dicoba kembali. Jika semua percobaan ulang habis, perintah akan gagal dan memerlukan eksekusi ulang manual dari perintah buat.

Kami tidak menyarankan Anda menggunakan isi ulang saat jumlah rekaman dalam tabel sumber melebihi number-of-nodes X 200 million (kadang-kadang bahkan lebih sedikit, tergantung pada kompleksitas kueri). Alternatifnya adalah opsi isi ulang dengan memindahkan jangkauan .

Menggunakan opsi isi ulang tidak didukung untuk data dalam cache dingin. Tingkatkan periode cache panas, jika perlu, selama pembuatan tampilan. Ini mungkin memerlukan peluasan skala.

Jika Anda mengalami kegagalan dalam pembuatan tampilan, coba ubah properti ini:

  • MaxSourceRecordsForSingleIngest: Secara default, jumlah rekaman sumber di setiap operasi penyerapan selama isi ulang adalah 2 juta per simpul. Anda dapat mengubah default ini dengan mengatur properti ini ke jumlah rekaman yang diinginkan. (Nilai adalah jumlah total rekaman di setiap operasi penyerapan.)

    Mengurangi nilai ini dapat membantu ketika pembuatan gagal pada batas memori atau batas waktu kueri. Meningkatkan nilai ini dapat mempercepat pembuatan tampilan, dengan asumsi bahwa kluster dapat menjalankan fungsi agregasi pada lebih banyak rekaman daripada default.

  • Concurrency: Operasi penyerapan, berjalan sebagai bagian dari proses isi ulang, berjalan bersamaan. Secara default, konkurensinya adalah min(number_of_nodes * 2, 5). Anda dapat mengatur properti ini untuk menambah atau mengurangi konkurensi. Sebaiknya tingkatkan nilai ini hanya jika CPU kluster rendah, karena peningkatannya dapat secara signifikan memengaruhi konsumsi CPU kluster.

Misalnya, perintah berikut akan mengisi ulang tampilan materialisasi dari 2020-01-01. Jumlah maksimum rekaman dalam setiap operasi penyerapan adalah 3 juta. Perintah akan menjalankan operasi penyerapan dengan konkurensi 2.

.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)
} 

Jika tampilan materialisasi menyertakan kunci pengelompokan tanggalwaktu, proses pengisian ulang mendukung penggantian batas waktu pembuatan berdasarkan kolom tanggalwaktu. Ini dapat berguna, misalnya, jika Anda ingin rekaman yang lebih lama dihilangkan sebelum rekaman terbaru, karena kebijakan penyimpanan didasarkan pada jangka waktu pembuatan. Properti updateExtentsCreationTime hanya didukung jika tampilan menyertakan kunci grup menurut tanggalwaktu yang menggunakan bin() fungsi . Misalnya, backfill berikut akan menetapkan waktu pembuatan berdasarkan kunci kelompokkan berdasarkan Timestamp:

.create async materialized-view with (
        backfill=true,
        updateExtentsCreationTime=true
    )
    CustomerUsage on table T
{
    T
    | summarize count() by Customer, bin(Timestamp, 1d)
} 

Backfill dengan memindahkan jangkauan

Opsi backfilling dengan memindahkan backfills tampilan materialisasi berdasarkan tabel yang ada, yang belum tentu merupakan tabel sumber dari tampilan materialisasi. Anda mencapai isi ulang dengan memindahkan jangkauan dari tabel yang ditentukan ke dalam tabel tampilan materialisasi yang mendasar. Proses ini menyiratkan bahwa:

  • Data dalam tabel yang ditentukan harus memiliki skema yang sama dengan skema tampilan materialisasi.
  • Rekaman dalam tabel yang ditentukan dipindahkan ke tampilan apa adanya. Mereka diasumsikan disimpulkan berdasarkan definisi tampilan terwujud.

Misalnya, jika tampilan materialisasi memiliki agregasi berikut:

T | summarize arg_max(Timestamp, *) by EventId

Kemudian rekaman dalam tabel sumber untuk operasi tingkat pemindahan harus sudah disimpulkan oleh EventID.

Karena operasi menggunakan ekstensi .move, rekaman akan dihapus dari tabel yang ditentukan selama isi ulang (dipindahkan, tidak disalin).

Isi ulang menurut tingkat pemindahan tidak didukung untuk semua fungsi agregasi yang didukung dalam tampilan materialisasi. Ini akan gagal untuk agregasi seperti avg(), dcount(), di mana data mendasar yang disimpan dalam tampilan berbeda dari agregasi itu sendiri.

Tampilan materialisasi hanya di-backfill berdasarkan tabel yang ditentukan. Materialisasi catatan dalam tabel sumber tampilan akan dimulai dari waktu pembuatan tampilan, secara default.

Jika tabel sumber tampilan materialisasi terus menyerap data, membuat tampilan dengan menggunakan tingkat pemindahan dapat mengakibatkan beberapa kehilangan data. Ini karena rekaman yang diserap ke dalam tabel sumber, dalam waktu singkat antara waktu menyiapkan tabel untuk diisi ulang dan waktu tampilan dibuat, tidak akan disertakan dalam tampilan materialisasi. Untuk menangani skenario ini, Anda dapat mengatur properti source_ingestion_time_from ke waktu mulai tampilan materialisasi di atas tabel sumber.

Kasus penggunaan

Opsi pengisian ulang dengan tingkat pemindahan dapat berguna dalam dua skenario utama:

  • Saat Anda sudah memiliki tabel yang menyertakan data sumber deduplikasi untuk tampilan materialisasi, dan Anda tidak memerlukan rekaman ini dalam tabel ini setelah pembuatan tampilan karena Anda hanya menggunakan tampilan materialisasi.

  • Ketika tabel sumber tampilan materialisasi sangat besar, dan mengisi ulang tampilan berdasarkan tabel sumber tidak berfungsi dengan baik karena keterbatasan yang disebutkan sebelumnya. Dalam hal ini, Anda dapat mengatur proses isi ulang sendiri ke dalam tabel sementara dengan menggunakan penyerapan dari perintah kueri dan salah satu alat orkestrasi yang direkomendasikan. Saat tabel sementara menyertakan semua rekaman untuk isi ulang, buat tampilan materialisasi berdasarkan tabel tersebut.

Contoh:

  • Dalam contoh berikut, tabel DeduplicatedTable menyertakan satu rekaman per EventId instans dan akan digunakan sebagai garis besar untuk tampilan materialisasi. Hanya rekaman dalam yang diserap T setelah waktu pembuatan tampilan yang akan disertakan dalam tampilan materialisasi.

    .create async materialized-view with (move_extents_from=DeduplicatedTable) MV on table T
    {
        T
        | summarize arg_max(Timestamp, *) by EventId
    } 
    
  • effectiveDateTime Jika properti ditentukan bersama dengan move_extents_from properti , hanya sejauh mana DeduplicatedTable nilainya MaxCreatedOn lebih besar dari effectiveDateTime yang disertakan dalam isi ulang (dipindahkan ke tampilan materialisasi):

    .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
    } 
    
  • Contoh berikut menunjukkan penggunaan source_ingestion_time_from properti dalam opsi pengisian ulang dengan jangkauan pemindahan. Menggunakan keduanya source_ingestion_time_from dan move_extents_from menunjukkan bahwa tampilan materialisasi diisi ulang dari dua sumber:

    • Tabelmove_extents_from: DeduplicatedTable dalam contoh berikut. Tabel ini harus mencakup semua data historis yang akan diisi ulang. Anda dapat secara opsional menggunakan effectiveDateTime properti untuk menyertakan hanya jangkauan yang DeduplicatedTable nilainya MaxCreatedOn lebih besar dari effectiveDateTime.

    • Tabel sumber tampilan materialisasi: T dalam contoh berikut. Isi ulang dari tabel ini hanya menyertakan rekaman yang nilai ingestion_time() -nya lebih besar dari source_ingestion_time_from.

      source_ingestion_time_from Properti harus digunakan hanya untuk menangani kemungkinan kehilangan data dalam waktu singkat antara menyiapkan tabel untuk mengisi ulang dari (DeduplicatedTable) dan waktu tampilan dibuat. Jangan atur properti ini terlalu jauh di masa lalu. Itu akan memulai pandangan terwujud dengan jeda yang signifikan, yang mungkin sulit dikejar.

    Dalam contoh berikut, asumsikan bahwa waktu saat ini adalah 2020-01-01 03:00. Tabel DeduplicatedTable adalah tabel yang dideduplikasi dari T. Tabel ini mencakup semua data historis, dideduplikasi hingga 2020-01-01 00:00. Perintah create menggunakan DeduplicatedTable untuk mengisi ulang tampilan materialisasi dengan menggunakan tingkat pemindahan. Perintah ini create juga mencakup semua rekaman dalam T yang diserap sejak 2020-01-01.

    .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
    } 
    

Membatalkan pembuatan tampilan materialisasi

Anda dapat membatalkan proses pembuatan tampilan materialisasi saat menggunakan opsi isi ulang. Tindakan ini berguna ketika pembuatan memakan waktu terlalu lama dan Anda ingin menghentikannya saat sedang berjalan.

Peringatan

Tampilan materialisasi tidak dapat dipulihkan setelah Anda menjalankan perintah ini.

Proses pembuatan tidak dapat segera dibatalkan. Perintah batal memberi sinyal agar materialisasi dihentikan, dan pembuatan secara berkala memeriksa apakah pembatalan diminta. Perintah batalkan menunggu periode maksimum 10 menit hingga proses pembuatan tampilan terwujud dibatalkan, dan melaporkan kembali jika pembatalan berhasil.

Bahkan jika pembatalan tidak berhasil dalam waktu 10 menit, dan perintah batal melaporkan kegagalan, tampilan terwujud mungkin akan membatalkan dirinya sendiri nanti dalam proses pembuatan. Perintah .show operations menunjukkan apakah operasi dibatalkan.

Jika operasi tidak lagi berlangsung ketika .cancel operation perintah dikeluarkan, perintah akan melaporkan kesalahan yang mengatakan demikian.

Sintaks

.cancel operationoperationId

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan Deskripsi
operationId guid ✔️ ID operasi yang dikembalikan dari .create async materialized-view perintah .

Output

Nama Jenis Deskripsi
OperationId guid ID .create materialized-view operasi perintah.
Operasi string Jenis operasi.
StartedOn datetime Waktu mulai dari operasi pembuatan.
CancellationState string Salah satu dari: Canceled successfully (pembuatan dibatalkan), Cancellation failed (tunggu waktu pembatalan habis), Unknown (pembuatan tampilan tidak lagi berjalan tetapi tidak dibatalkan oleh operasi ini).
ReasonPhrase string Alasan mengapa pembatalan tidak berhasil.

Contoh

.cancel operation c4b29441-4873-4e36-8310-c631c35c916e
OperationId Operasi StartedOn CancellationState ReasonPhrase
c4b29441-4873-4e36-8310-c631c35c916e MaterializedViewCreateOrAlter 2020-05-08 19:45:03.9184142 Canceled successfully

Jika pembatalan belum selesai dalam waktu 10 menit, CancellationState akan menunjukkan kegagalan. Pembuatan kemudian dapat dibatalkan.