operator partisi
Operator partisi mempartisi rekaman tabel inputnya ke dalam beberapa subtable sesuai dengan nilai dalam kolom kunci. Operator menjalankan subkueri pada setiap subtabel, dan menghasilkan satu tabel output yang merupakan persatuan hasil semua subkueri.
Operator ini berguna saat Anda perlu melakukan subkueri hanya pada subset baris yang termasuk dalam kunci partisi yang sama, dan tidak mengkueri seluruh himpunan data. Subkueri ini dapat mencakup fungsi agregat, fungsi jendela, N teratas, dan lainnya.
Operator partisi mendukung beberapa strategi operasi kueri bertumpuk:
- Native - gunakan dengan sumber data implisit dengan ribuan nilai partisi kunci.
- Shuffle - gunakan dengan sumber implisit dengan jutaan nilai partisi kunci.
- Legacy - gunakan dengan sumber implisit atau eksplisit untuk 64 atau kurang nilai partisi kunci.
Sintaks
T partition
|
[ hint.strategy=
Strategi ] [ Petunjuk ] by
Transformasi KolomSubQuery (
)
T partition
|
[ hint.strategy=legacy
] [ Petunjuk ] by
Column {
SubQueryWithSource }
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
T | string |
✔️ | Sumber tabular input. |
Strategi | string |
Nilai legacy , shuffle , atau native . Petunjuk ini mendefinisikan strategi eksekusi operator partisi.Jika tidak ada strategi yang ditentukan, legacy strategi digunakan. Untuk informasi selengkapnya, lihat Strategi. |
|
Kolom | string |
✔️ | Nama kolom di T yang nilainya menentukan cara mempartisi sumber tabular input. |
TransformationSubQuery | string |
✔️ | Ekspresi transformasi tabular. Sumbernya secara implisit subtable yang dihasilkan dengan mempartisi rekaman T. Setiap subtable bersifat homogen pada nilai Kolom. Ekspresi hanya boleh memberikan satu hasil tabular dan tidak boleh memiliki jenis pernyataan lain, seperti let pernyataan. |
SubQueryWithSource | string |
✔️ | Ekspresi tabular yang menyertakan sumber tabularnya sendiri, seperti referensi tabel. Sintaks ini hanya didukung dengan strategi warisan. Subkueri hanya dapat mereferensikan kolom kunci, Kolom, dari T. Untuk mereferensikan kolom, gunakan Kolom) sintakstoscalar( .Ekspresi hanya boleh memberikan satu hasil tabular dan tidak boleh memiliki jenis pernyataan lain, seperti let pernyataan. |
Petunjuk | string |
Nol atau lebih parameter yang dipisahkan spasi dalam bentuk: Nilai HintName = yang mengontrol perilaku operator. Lihat petunjuk yang didukung per jenis strategi. |
Petunjuk yang didukung
Nama petunjuk | Jenis | Strategi | Deskripsi |
---|---|---|---|
hint.shufflekey |
string |
mencampuri | Kunci partisi yang digunakan untuk menjalankan operator partisi dengan shuffle strategi. |
hint.materialized |
bool |
warisan | Jika diatur ke true , akan terwujud sumber operator partition . Nilai defaultnya adalah false . |
hint.concurrency |
int |
warisan | Menentukan berapa banyak partisi yang akan dijalankan secara paralel. Nilai defaultnya adalah 16 . |
hint.spread |
int |
warisan | Menentukan cara mendistribusikan partisi di antara node kluster. Nilai defaultnya adalah 1 .Misalnya, jika ada partisi N dan petunjuk spread diatur ke P, maka partisi N akan diproses oleh P node kluster yang berbeda secara paralel/berurutan tergantung pada petunjuk konkurensi. |
Mengembalikan
Operator mengembalikan penyatuan hasil kueri bertumpuk individu.
Strategi
Operator partisi mendukung beberapa strategi operasi subkueri: asli, acak, dan warisan.
Catatan
Perbedaan antara native
strategi dan shuffle
memungkinkan pemanggil untuk menunjukkan kardinalitas dan strategi eksekusi subkueri. Pilihan ini dapat memengaruhi berapa lama subkueri selesai tetapi tidak mengubah hasil akhir.
Strategi asli
Strategi ini harus diterapkan ketika jumlah nilai berbeda dari kunci partisi tidak besar, kira-kira dalam ribuan.
Subkueri harus berupa transformasi tabular yang tidak menentukan sumber tabular. Sumbernya implisit dan ditetapkan sesuai dengan partisi subtabel. Hanya operator tertentu yang didukung yang dapat digunakan dalam subkueri. Tidak terdapat batasan jumlah partisi.
Untuk menggunakan strategi ini, tentukan hint.strategy=native
.
Strategi acak
Strategi ini harus diterapkan ketika jumlah nilai berbeda dari kunci partisi besar, dalam jutaan.
Subkueri harus berupa transformasi tabular yang tidak menentukan sumber tabular. Sumbernya implisit dan ditetapkan sesuai dengan partisi subtabel. Hanya operator tertentu yang didukung yang dapat digunakan dalam subkueri. Tidak terdapat batasan jumlah partisi.
Untuk menggunakan strategi ini, tentukan hint.strategy=shuffle
. Untuk informasi selengkapnya tentang strategi dan performa acak, lihat kueri acak.
Operator yang didukung untuk strategi asli dan acak
Daftar operator berikut dapat digunakan dalam subkueri dengan strategi asli atau acak:
- count
- distinct
- perpanjang
- make-series
- mv_apply
- mv-expand
- Mengurai
- parse-where
- proyek
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- contoh
- sampel-berbeda
- memindai
- cari
- serialisasi
- urutkan
- meringkas
- take
- top
- pemukul teratas
- berlapis atas
- di mana
Catatan
- Operator yang mereferensikan sumber tabel selain partisi subtable tidak kompatibel dengan
native
strategi danshuffle
. Misalnya, join, union, externaldata, dan evaluasi (plugin). Untuk skenario seperti itu, gunakan strategi warisan. - Operator fork tidak didukung untuk jenis strategi apa pun, karena subkueri harus mengembalikan satu hasil tabular.
Strategi lama
Untuk alasan historis, legacy
strateginya adalah strategi default. Namun, kami sarankan untuk mendukung strategi asli atau acak , legacy
karena pendekatannya terbatas pada 64 partisi dan kurang efisien.
Dalam beberapa skenario, legacy
strategi mungkin diperlukan karena dukungannya untuk menyertakan sumber tabular dalam subkueri. Dalam kasus seperti itu, subkueri hanya dapat mereferensikan kolom kunci, Kolom, dari sumber tabular input, T. Untuk mereferensikan kolom, gunakan Kolom)
sintakstoscalar(
.
Jika subkueri adalah transformasi tabular tanpa sumber tabular, sumbernya implisit dan didasarkan pada partisi subtable.
Untuk menggunakan strategi ini, tentukan atau hilangkan hint.strategy=legacy
indikasi strategi lainnya.
Catatan
Kesalahan akan terjadi jika kolom partisi, Kolom, berisi lebih dari 64 nilai yang berbeda.
Contoh
Menemukan nilai teratas
Dalam beberapa kasus, lebih berkinerja dan lebih mudah untuk menulis kueri menggunakan partition
operator daripada menggunakan top-nested
operator. Kueri berikut menjalankan penghitungan subkueri summarize
dan top
untuk masing-masing State
dimulai dengan W
: "WYOMING", "WASHINGTON", "WEST VIRGINIA", dan "WISCONSIN".
StormEvents
| where State startswith 'W'
| partition hint.strategy=native by State
(
summarize Events=count(), Injuries=sum(InjuriesDirect) by EventType, State
| top 3 by Events
)
Hasil
EventType | Provinsi | Acara | Cedera |
---|---|---|---|
Hujan es | WYOMING | 108 | 0 |
Angin Kencang | WYOMING | 81 | 5 |
Badai Musim Dingin | WYOMING | 72 | 0 |
Salju Tebal | WASHINGTON | 82 | 0 |
Angin Kencang | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
Angin Badai Petir | WEST VIRGINIA | 180 | 1 |
Hujan es | WEST VIRGINIA | 103 | 0 |
Cuaca Musim Dingin | WEST VIRGINIA | 88 | 0 |
Angin Badai Petir | WISCONSIN | 416 | 1 |
Badai Musim Dingin | WISCONSIN | 310 | 0 |
Hujan es | WISCONSIN | 303 | 1 |
Strategi asli
Kueri berikut mengembalikan 2 EventType
nilai teratas menurut TotalInjuries
untuk masing-masing State
yang dimulai dengan 'W':
StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
(
summarize TotalInjueries = sum(InjuriesDirect) by EventType
| top 2 by TotalInjueries
)
Hasil
EventType | TotalInjueries |
---|---|
Tornado | 4 |
Hujan es | 1 |
Angin Badai Petir | 1 |
Panas Berlebihan | 0 |
Angin Kencang | 13 |
Lightning | 5 |
Angin Kencang | 5 |
Tanah Longsor | 3 |
Strategi acak
Kueri berikut mengembalikan 3 DamagedProperty
nilai teratas foreach EpisodeId
dan kolom EpisodeId
dan State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Hasil
Hitung |
---|
22345 |
Strategi lama dengan sumber eksplisit
Kueri berikut menjalankan dua subkueri:
- Ketika
x == 1
, kueri mengembalikan semua baris dariStormEvents
yang memilikiInjuriesIndirect == 1
. - Ketika
x == 2
, kueri mengembalikan semua baris dariStormEvents
yang memilikiInjuriesIndirect == 2
.
Hasil akhir adalah persatuan dari kedua subkueri ini.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Hasil
Hitung |
---|
113 |
Referensi partisi
Contoh berikut menunjukkan cara menggunakan operator sebagai untuk memberikan "nama" ke setiap partisi data dan kemudian menggunakan kembali nama itu di dalam kueri bertumpuk. Pendekatan ini hanya relevan dengan legacy
strategi.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)
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