如何使用 JOIN 解决 Kusto 的区分大小写问题
How to work around Kusto's case sensitivity with JOIN
我正在使用 Log Analytics (Kusto) 构建动态计算机组。我需要加入两个计算机区分大小写不匹配的 table。有没有人想出这种情况的解决方法?
示例(使用一台计算机):
Heartbeat table 有名称为 ABCDE.domain.com 的计算机
Application_CL table 有名称为 abcde.DOMAIN.com
的计算机
如果我 运行 此查询,结果集为空,除非 FQDN 完全匹配。如果这是 SQL,它将 return ABCDE.domain.com,这就是我们需要的。
let H = Heartbeat | summarize by Computer; let A = Application_CL | where Name_s == "AppName" | summarize by Computer; H | join A on $left.Computer == $right.Computer | distinct Computer
我试过使用=~作为连接运算符,但它必须是==。 toupper() 和 tolower() 在这种情况下对我没有好处。
提前致谢
如果您的查询逻辑允许您使用不区分大小写的 in~()
或 !in~()
运算符,您应该选择该选项。
否则,您可以在两个连接分支中扩展计算列,然后再对该列应用连接(但与不必执行此操作相比,效率较低)。
类似于:
T1
| extend lowercase_computer_name = tolower(ComputerName)
| join (T2 | extend lowercase_computer_name = tolower(ComputerName))
on lowercase_computer_name
您可以改用搜索,默认情况下不区分大小写
如果您想要进行不区分大小写的正则表达式计算,您可以在正则表达式模式的开头包含不区分大小写标志。
如以下示例所示:
ServiceName matches regex "(?i)super duper express"
参见:
我正在使用 Log Analytics (Kusto) 构建动态计算机组。我需要加入两个计算机区分大小写不匹配的 table。有没有人想出这种情况的解决方法?
示例(使用一台计算机):
Heartbeat table 有名称为 ABCDE.domain.com 的计算机 Application_CL table 有名称为 abcde.DOMAIN.com
的计算机如果我 运行 此查询,结果集为空,除非 FQDN 完全匹配。如果这是 SQL,它将 return ABCDE.domain.com,这就是我们需要的。
let H = Heartbeat | summarize by Computer; let A = Application_CL | where Name_s == "AppName" | summarize by Computer; H | join A on $left.Computer == $right.Computer | distinct Computer
我试过使用=~作为连接运算符,但它必须是==。 toupper() 和 tolower() 在这种情况下对我没有好处。
提前致谢
如果您的查询逻辑允许您使用不区分大小写的 in~()
或 !in~()
运算符,您应该选择该选项。
否则,您可以在两个连接分支中扩展计算列,然后再对该列应用连接(但与不必执行此操作相比,效率较低)。
类似于:
T1
| extend lowercase_computer_name = tolower(ComputerName)
| join (T2 | extend lowercase_computer_name = tolower(ComputerName))
on lowercase_computer_name
您可以改用搜索,默认情况下不区分大小写
如果您想要进行不区分大小写的正则表达式计算,您可以在正则表达式模式的开头包含不区分大小写标志。
如以下示例所示:
ServiceName matches regex "(?i)super duper express"
参见: