同时使用 'distinct' 和 'project'

Using both 'distinct' and 'project'

在 Azure 数据资源管理器中,我尝试同时使用 'project' 和 'distinct' 关键字。 table 记录有 3 个字段我想在 'project' 上使用:

  1. 牛名
  2. 奶牛类型
  3. 奶牛数量
  4. 奶牛标签

但是 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

结果: