.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 table
SourceTableName{
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_min take_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 kapanautoUpdateSchema
false, perubahan pada tabel sumber juga dapat menyebabkan ketidakcocokan skema. Hindari kegagalan ini dengan menentukan kueri tampilan sebagaiarg_max(Timestamp, Column1, Column2, ...)
, atau dengan menggunakan opsiautoUpdateSchema
. - 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-view
SourceMaterializedViewName{
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
daneffectiveDateTime
. 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 , selamasummarize
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. Operatorsummarize
harus selalu menjadi operator terakhir dalam kueri.Tampilan materialisasi yang hanya mencakup satu
arg_max
arg_min
take_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 baikarg_max
//arg_min
take_any
dan agregasi lainnya dalam tampilan yang sama).Kueri tidak boleh menyertakan operator yang bergantung pada
now()
. Misalnya, kueri tidak boleh memilikiwhere 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-nested
top
,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, jalankanMaterializedViewName | 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:
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
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 samaTimestamp
, dan karena itu menambahkanTimestamp
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 lamaTimestamp
. 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
olehResourceId
nilai yang akan sering difilter olehSubscriptionId
. Dengan asumsi bahwaResourceId
nilai selalu termasuk dalam nilai yang samaSubscriptionId
, 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 adalahmin(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 perEventId
instans dan akan digunakan sebagai garis besar untuk tampilan materialisasi. Hanya rekaman dalam yang diserapT
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 denganmove_extents_from
properti , hanya sejauh manaDeduplicatedTable
nilainyaMaxCreatedOn
lebih besar darieffectiveDateTime
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 keduanyasource_ingestion_time_from
danmove_extents_from
menunjukkan bahwa tampilan materialisasi diisi ulang dari dua sumber:Tabel
move_extents_from
:DeduplicatedTable
dalam contoh berikut. Tabel ini harus mencakup semua data historis yang akan diisi ulang. Anda dapat secara opsional menggunakaneffectiveDateTime
properti untuk menyertakan hanya jangkauan yangDeduplicatedTable
nilainyaMaxCreatedOn
lebih besar darieffectiveDateTime
.Tabel sumber tampilan materialisasi:
T
dalam contoh berikut. Isi ulang dari tabel ini hanya menyertakan rekaman yang nilai ingestion_time() -nya lebih besar darisource_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
. TabelDeduplicatedTable
adalah tabel yang dideduplikasi dariT
. Tabel ini mencakup semua data historis, dideduplikasi hingga2020-01-01 00:00
. Perintahcreate
menggunakanDeduplicatedTable
untuk mengisi ulang tampilan materialisasi dengan menggunakan tingkat pemindahan. Perintah inicreate
juga mencakup semua rekaman dalamT
yang diserap sejak2020-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 operation
operationId
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk