Bagikan melalui


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
}