同时使用 'distinct' 和 'project'
Using both 'distinct' and 'project'
在 Azure 数据资源管理器中,我尝试同时使用 'project' 和 'distinct' 关键字。
table 记录有 3 个字段我想在 'project' 上使用:
- 牛名
- 奶牛类型
- 奶牛数量
- 奶牛标签
但是 table 中还有许多其他字段,例如日期、测量等,我不想 return。
Cows
| project CowName, CowType, CowNum, CowLabel
但是,我想避免 CowName 和 CowNum 的重复记录,所以我包含了
Cows
| project CowName, CowType, CowNum, CowLabel
| distinct CowName, CowNum
但是当我这样做时,唯一 returned 的列是 CowName 和 CowNum。我现在完全缺少 CowType 和 CowLabel。
有没有办法同时使用 'project' 和 'distinct' 而不会相互干扰?
我应该采取不同的方法吗?
你可以这样做:
Cows
| distinct CowName, CowType, CowNum
或者,如果您不希望 CowType 具有不同的值 - 而只是具有它的任何值:
Cows
| summarize any(CowType) by CowName, CowNum
参考文献:
汇总运算符:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/summarizeoperator
区别运算符:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/distinctoperator
any() 聚合函数:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/any-aggfunction
你可以用这个
| summarize any(CowType, CowLabel) by CowName, CowNum
为了形象化这将如何工作,请看以下示例 table/query:
let CowTable = datatable(CowNum:int, CowName:string, CowType:string, CowLabel:string, DontWantThis:int)
[
1, "Bob", "Bull", "label1", 99,
2, "Tipsy", "Heifer", "label1", 98,
3, "Milly", "Heifer", "label2", 99,
4, "Bob", "Bull", "label2", 87,
4, "Bob", "Bull", "label2", 77,
2, "Hanna", "Heifer", "label1", 98,
];
CowTable
| summarize any(CowType, CowLabel) by CowName, CowNum
结果:
请注意,我们没有看到 CowNum 4 列出了两次,但是我们确实看到 CowNum 2 列出了两次;这是因为这些行对于 CowName 和 CowNum 是唯一的。我们还看到 Bob 列出了两次(不是 3 次);这是因为 2 个 Bob 条目在 CowName/CowNum 方面是唯一的,但 2 个 Bob 条目在 CowName/CowNum.
方面不是唯一的
如果您真的只想要 CowName 唯一且 CowNum 也不同的结果,您可以分两步完成:
CowTable
| summarize any(CowName, CowType, CowLabel) by CowNum
| summarize any(CowNum, any_CowType, any_CowLabel) by any_CowName
//normalize column names
| project CowNum = any_CowNum, CowName = any_CowName, CowType = any_any_CowType, CowLabel = any_any_CowLabel
结果:
在 Azure 数据资源管理器中,我尝试同时使用 'project' 和 'distinct' 关键字。 table 记录有 3 个字段我想在 'project' 上使用:
- 牛名
- 奶牛类型
- 奶牛数量
- 奶牛标签
但是 table 中还有许多其他字段,例如日期、测量等,我不想 return。
Cows
| project CowName, CowType, CowNum, CowLabel
但是,我想避免 CowName 和 CowNum 的重复记录,所以我包含了
Cows
| project CowName, CowType, CowNum, CowLabel
| distinct CowName, CowNum
但是当我这样做时,唯一 returned 的列是 CowName 和 CowNum。我现在完全缺少 CowType 和 CowLabel。
有没有办法同时使用 'project' 和 'distinct' 而不会相互干扰? 我应该采取不同的方法吗?
你可以这样做:
Cows
| distinct CowName, CowType, CowNum
或者,如果您不希望 CowType 具有不同的值 - 而只是具有它的任何值:
Cows
| summarize any(CowType) by CowName, CowNum
参考文献:
汇总运算符:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/summarizeoperator
区别运算符:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/distinctoperator
any() 聚合函数:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/any-aggfunction
你可以用这个
| summarize any(CowType, CowLabel) by CowName, CowNum
为了形象化这将如何工作,请看以下示例 table/query:
let CowTable = datatable(CowNum:int, CowName:string, CowType:string, CowLabel:string, DontWantThis:int)
[
1, "Bob", "Bull", "label1", 99,
2, "Tipsy", "Heifer", "label1", 98,
3, "Milly", "Heifer", "label2", 99,
4, "Bob", "Bull", "label2", 87,
4, "Bob", "Bull", "label2", 77,
2, "Hanna", "Heifer", "label1", 98,
];
CowTable
| summarize any(CowType, CowLabel) by CowName, CowNum
结果:
请注意,我们没有看到 CowNum 4 列出了两次,但是我们确实看到 CowNum 2 列出了两次;这是因为这些行对于 CowName 和 CowNum 是唯一的。我们还看到 Bob 列出了两次(不是 3 次);这是因为 2 个 Bob 条目在 CowName/CowNum 方面是唯一的,但 2 个 Bob 条目在 CowName/CowNum.
方面不是唯一的如果您真的只想要 CowName 唯一且 CowNum 也不同的结果,您可以分两步完成:
CowTable
| summarize any(CowName, CowType, CowLabel) by CowNum
| summarize any(CowNum, any_CowType, any_CowLabel) by any_CowName
//normalize column names
| project CowNum = any_CowNum, CowName = any_CowName, CowType = any_any_CowType, CowLabel = any_any_CowLabel
结果: