我正在尝试生成一个查询,在这个查询中,我限制了每个特定类别得到的子结果的数量,如果有一个好的函数可以帮助我。
快速示例:
| ID | Category | Value | A bunch of other important columns |
|-----------|-----------------|--------------|-------------------------------------------|
| 1 | A | GUID | |
| 2 | A | GUID | |
| 3 | A | GUID | |
| 4 | A | GUID | |
| 5 | B | GUID | |
| 6 | B | GUID | |
我希望每个类别只返回N个GUID。(主要是因为我已经达到了某些类别的64MB Kusto查询限制,这些类别无论如何都不会有用(
Top嵌套运算符一开始看起来不错,但我不想做任何聚合,它会过滤掉其他重要的列。根据页面上的注释,我可以使用Ignore=max(1(来删除聚合,然后将我的所有其他列序列化为某个值,然后在过滤器之后解压缩。但那感觉就像我做错了什么。
我也尝试过类似的东西:
| partition by Category ( top 3 by Value)
但它被限制为64个分区,我需要接近500个分区。
有什么好的模式吗?
开始:
let NumItemsPerCategory = 3;
datatable(ID:long, Category:string, Value:guid)
[
1, "A", guid(40b73f8f-78d2-4eae-bd5b-b3e00f38ac33),
2, "A", guid(043ee507-aadf-4453-bcc6-d8f4f541b043),
3, "A", guid(f71d3cc0-ce46-474f-9dcd-f3883fa08859),
4, "A", guid(bf259fc8-e9fe-4a99-a296-ca81e1fa250a),
5, "B", guid(d8ee3ac7-da76-4e87-a9ed-e5a37c943ad2),
6, "B", guid(282e74ff-3b71-407c-a2a7-92bb1cb17b27),
]
| summarize PackedItems = make_list(pack_all(), NumItemsPerCategory) by Category
| project-away Category
| mv-expand PackedItem = PackedItems
| evaluate bag_unpack(PackedItem)
| project-away PackedItems
结果:
| ID | Category | Value |
|----|----------|--------------------------------------|
| 1 | A | 40b73f8f-78d2-4eae-bd5b-b3e00f38ac33 |
| 2 | A | 043ee507-aadf-4453-bcc6-d8f4f541b043 |
| 3 | A | f71d3cc0-ce46-474f-9dcd-f3883fa08859 |
| 5 | B | d8ee3ac7-da76-4e87-a9ed-e5a37c943ad2 |
| 6 | B | 282e74ff-3b71-407c-a2a7-92bb1cb17b27 |