循环遍历表格表达式并为 KUSTO

如何解决循环遍历表格表达式并为 KUSTO

我有 2 个没有公共字段的表(Tab1、Tab2),我想在 Tab2 上为 Tab1 中的每一行运行一个查询,并且子查询中的条件应使用外部查询中的列值。

Pseudo code 

tab1
| project timestamp,duration

tab2
| project event_time_t,data

pseudo code/ desired query

tab1 join tab2
| where event_time_t between (tab1.timestamp .. datetime_add('millisecond',toint(tab1.duration),tab1.timestamp))

我已经检查了以下选项,但无法正常工作

  1. MV-Apply:无法使用表格表达式
  2. 用户定义的函数:改变行上下文数据有限制
  3. repeat : 仅适用于标量

更新:

让我的问题更加清晰。

我想找到 T2 中位于 T1.timestamp 和 add_datetime(T1.timestamp + duration_millisecond) 之间的所有行

我确实尝试过交叉连接方法并得到了想要的结果,但由于我的 T2 表很大,所以成本很高。我可以像在 T-sql 相关子查询中那样以编程方式执行此操作,其中为 T1 中的每一行执行子查询并参考外部查询动态更改 between 子句?

let T1 = datatable(OperationID:sring,timestamp:datetime,duration_millisecond:int)
[
    1,datetime(2021-02-15T10:56:28.768),22,2,datetime(2021-02-15T11:28:28.165),17,3,datetime(2021-02-15T12:29:48.954),90,4,datetime(2021-02-15T13:30:09.786),5,datetime(2021-02-15T14:30:22.333),6,];
let T2 = datatable(event_time_t:datetime,data:string)
[
    datetime(2021-02-15T10:56:28.775),"Some string",datetime(2021-02-15T10:56:28.788),"Another string",datetime(2021-02-15T11:28:28.167),"Yet another string","Last string1",datetime(2021-02-15T12:29:48.999),"Last string2",datetime(2021-02-15T12:29:49.023),"Last string3",datetime(2021-02-15T12:29:49.025),"Last string4",datetime(2021-02-15T13:30:09.787),"Last string5",datetime(2021-02-15T14:30:22.335),"Last string6",datetime(2021-02-15T14:30:22.337),"Last string7",];
T1
| extend temp=1
| join kind=fullouter (
    T2
    | extend temp=1
) on temp
| project-away temp,temp1
| where event_time_t between (timestamp .. datetime_add('millisecond',duration_millisecond,timestamp))

预期结果:

Result = datatable(OperationID:sring,duration_millisecond:int,event_time_t:datetime,data:string)
[
    1,datetime(2021-02-15T10:56:28.775),1,]

解决方法

您可以连接两个没有公共列的表,方法是向具有相同值的两列添加一个临时列(例如 | extend temp=1),然后通过这个新临时 joining列(例如 | join kind=fullouter (...) on temp)。

这是一个例子:

let T1 = datatable(timestamp:datetime,duration:timespan)
[
    datetime(2021-02-15T10:56:28),time(00:05:00.0102814),datetime(2021-02-15T11:28:29),time(00:07:01.0245718),datetime(2021-02-15T12:29:48),time(01:00:00.6943432),datetime(2021-02-15T13:30:09),time(00:45:02.3022766),datetime(2021-02-15T14:30:22),time(00:10:06.2003221),];
let T2 = datatable(event_time_t:datetime,data:string)
[
    datetime(2021-02-15T11:22:48.4361218Z),"Some string",datetime(2021-02-15T12:23:13.4319484Z),"Another string",datetime(2021-02-15T13:55:54.8762753Z),"Yet another string",datetime(2021-02-15T14:28:13.5785646Z),"Last string",];
T1
| extend temp=1
| join kind=fullouter (
    T2
    | extend temp=1
) on temp
| project-away temp,temp1
| where event_time_t between (timestamp .. duration)

顺便说一句,请注意,我简化了您的 between 过滤器,因此右侧将包含时间跨度,而不是日期时间 - 这样效率更高,更易于阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?