Perintah .replace extents
Berlaku untuk: ✅Azure Data Explorer
Perintah ini menghilangkan dan memindahkan tingkat dalam satu transaksi dalam konteks database tertentu. Perintah menghilangkan batas yang ditentukan dari tabel tujuan dan memindahkan tingkat yang ditentukan dari tabel sumber ke tabel tujuan.
Catatan
Pecahan data disebut jangkauan, dan semua perintah menggunakan "extent" atau "extents" sebagai sinonim. Untuk informasi selengkapnya tentang jangkauan, lihat Ringkasan Jangkauan (Shard Data).
Izin
Anda harus memiliki setidaknya izin Admin Tabel untuk tabel sumber dan tujuan.
Batasan
- Tabel sumber dan tujuan harus berada dalam database konteks.
- Semua batasan yang ditentukan oleh ExtentsToDropQuery diharapkan milik tabel tujuan.
- Semua kolom dalam tabel sumber diharapkan ada di tabel tujuan dengan nama dan jenis data yang sama.
- Jika tabel tujuan adalah tabel sumber dari tampilan materialisasi, perintah mungkin gagal karena tampilan materialisasi tidak dapat memproses rekaman dalam tingkat yang dipindahkan. Lihat detail selengkapnya di halaman batasan tampilan terwujud. Anda dapat mengatasi kesalahan ini dengan mengatur waktu penyerapan baru selama perintah pemindahan. Lihat
setNewIngestionTime
di properti yang didukung.
Sintaks
.replace
[async
] extents
in
table
DestinationTableName [ with
(
PropertyName =
PropertyValue [,
...]] <|
{
)
ExtentsToDropQuery},{
ExtentsToMoveQuery}
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
async |
string |
Jika ditentukan, perintah berjalan secara asinkron. | |
DestinationTableName | string |
✔️ | Nama tabel yang akan dipindahkan tingkatnya. |
FromDate | datetime |
Tanggal mulai jendela kueri. | |
ToDate | datetime |
Tanggal akhir jendela kueri. | |
PropertyName, PropertyValue | string |
Satu atau beberapa properti yang didukung. | |
ExtentsToDropQuery | string |
✔️ | Hasil kueri ini harus menyertakan ExtentId kolom, yang berisi id sejauh mana yang akan dihapus dari tabel tujuan. |
ExtentsToMoveQuery | string |
✔️ | Hasil kueri ini harus menyertakan ExtentId kolom dan TableName , yang berisi tabel sumber dan ID tingkat yang akan dipindahkan ke tabel tujuan. |
Properti yang didukung
Nama properti | Jenis | Wajib | Deskripsi |
---|---|---|---|
setNewIngestionTime |
bool |
Jika diatur ke true , waktu penyerapan baru ditetapkan ke semua rekaman sejauh dipindahkan. Ini berguna ketika rekaman diproses oleh beban kerja yang bergantung pada kursor database, seperti tampilan materialisasi dan ekspor data berkelanjutan. |
|
extentCreatedOnFrom |
datetime |
✔️ | Terapkan pada tingkat yang dibuat setelah titik waktu ini. |
extentCreatedOnTo |
datetime |
✔️ | Terapkan pada tingkat yang dibuat sebelum titik waktu ini. |
Catatan
Untuk performa yang lebih baik, atur parameter extentCreatedOnFrom dan extentCreatedOnTo ke rentang sekecil mungkin.
Mengembalikan
Saat perintah dijalankan secara sinkron, tabel dengan skema berikut dikembalikan.
Parameter output | Tipe | Deskripsi |
---|---|---|
OriginalExtentId | string |
Pengidentifikasi unik (GUID) untuk tingkat asli dalam tabel sumber yang dipindahkan ke tabel tujuan, atau sejauh mana tabel tujuan yang dihilangkan. |
ResultExtentId | string |
Pengidentifikasi unik (GUID) untuk tingkat hasil dipindahkan dari tabel sumber ke tabel tujuan. Kosong, jika jangkauan diturunkan dari tabel tujuan. Setelah kegagalan: "Gagal." |
Detail | string |
Mencantumkan detail kegagalan jika operasi gagal. |
Ketika perintah dijalankan secara asinkron, ID operasi (GUID) dikembalikan. Pantau status operasi dengan perintah operasi .show, dan ambil hasil eksekusi yang berhasil dengan perintah detail operasi .show.
Catatan
Perintah akan gagal jika tingkat yang dikembalikan oleh kueri ExtentsToDropQuery tidak ada di tabel tujuan. Hal ini dapat terjadi jika jangkauan digabungkan sebelum perintah ganti dieksekusi. Untuk memastikan perintah gagal pada jangkauan yang hilang, periksa apakah kueri mengembalikan ExtentIds yang diharapkan. Contoh pertama akan gagal jika tingkat penurunan tidak ada dalam tabel MyOtherTable. Namun, contoh kedua akan berhasil meskipun tingkat penurunan tidak ada, karena kueri untuk dihilangkan tidak mengembalikan ID yang luas.
Contoh
Memindahkan semua tingkatan dalam rentang waktu pembuatan tertentu dari dua tabel
Pindahkan semua batasan dari dua tabel tertentu (MyTable1
, MyTable2
) dalam rentang waktu pembuatan tertentu ke tabel MyOtherTable
, dan hilangkan semua tingkatan dalam MyOtherTable
ditandai dengan drop-by:MyTag
:
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
.show table MyOtherTable extents where tags has 'drop-by:MyTag'
},
{
.show tables (MyTable1,MyTable2) extents
}
Sampel output
OriginalExtentId | ResultExtentId | Detail |
---|---|---|
e133f050-a1e2-4dad-8552-1f5cf47cab69 | 0d96ab2d-9dd2-4d2c-a45e-b24c65aa6687 | |
cdbeb35b-87ea-499f-b545-defbae091b57 | a90a303c-8a14-4207-8f35-d8ea94ca45be | |
4fcb4598-9a31-4614-903c-0c67c286da8c | 97aafea1-59ff-4312-b06b-08f42187872f | |
2dfdef64-62a3-4950-a130-96b5b1083b5a | 0fb7f3da-5e28-4f09-a000-e62eb41592df |
Pindahkan semua tingkatan dalam rentang waktu pembuatan tertentu dari satu tabel ke tabel lainnya, hilangkan tingkat tertentu
Pindahkan semua tingkatan dalam rentang waktu pembuatan tertentu dari satu tabel tertentu (MyTable1
) ke tabel MyOtherTable
, dan letakkan tingkat tertentu di MyOtherTable
, dengan ID-nya:
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
print ExtentId = "2cca5844-8f0d-454e-bdad-299e978be5df"
},
{
.show table MyTable1 extents
}
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
.show table MyOtherTable extents
| where ExtentId == guid(2cca5844-8f0d-454e-bdad-299e978be5df)
},
{
.show table MyTable1 extents
}
Menerapkan logika idempotent
Terapkan logika idempotent sehingga Kusto menurunkan jangkauan dari tabel t_dest
hanya jika ada jangkauan untuk dipindahkan dari tabel t_source
ke tabel t_dest
:
.replace async extents in table t_dest with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
let any_extents_to_move = toscalar(
t_source
| where extent_tags() has 'drop-by:blue'
| summarize count() > 0
);
let extents_to_drop =
t_dest
| where any_extents_to_move and extent_tags() has 'drop-by:blue'
| summarize by ExtentId = extent_id()
;
extents_to_drop
},
{
let extents_to_move =
t_source
| where extent_tags() has 'drop-by:blue'
| summarize by ExtentId = extent_id(), TableName = 't_source'
;
extents_to_move
}