是否有 KQL 查询来限制我获得的每个特定类别的子结果数量?
Is there a KQL query to limit the number of sub results I get per a particular category?
我正在尝试生成一个查询,在该查询中我限制了每个特定类别获得的子结果的数量,如果有一个好的函数可以使用一些帮助。
快速示例:
| 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 | |
我想 return 每个类别只有 N 个 GUID。 (主要是因为我达到了某些类别的 64MB Kusto 查询限制,这些类别无论如何都没有用)
Top-nested 运算符初看起来不错,但我不想做任何聚合,它会过滤掉其他重要的列。根据页面上的注释,我可以使用 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 |
我正在尝试生成一个查询,在该查询中我限制了每个特定类别获得的子结果的数量,如果有一个好的函数可以使用一些帮助。
快速示例:
| 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 | |
我想 return 每个类别只有 N 个 GUID。 (主要是因为我达到了某些类别的 64MB Kusto 查询限制,这些类别无论如何都没有用)
Top-nested 运算符初看起来不错,但我不想做任何聚合,它会过滤掉其他重要的列。根据页面上的注释,我可以使用 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 |