在输入为查询的情况下,连续数据导出如何确定摄取时间

时间:2019-05-03 07:53:33

标签: kusto azure-data-explorer

每当定义一个连续导出实体时,它都会以查询作为输入。如果查询只是一个表名,则很容易理解导出是如何进行的。必须考虑导出实体运行时的不同时间点,考虑表中记录的摄取时间。但是,如果查询是实际的“查询”,我的意思是说正在使用各种管道运算符在表顶部应用某种转换。在那种情况下,查询的结果是动态的,数据不会在任何地方被提取。这是否意味着continuous-export实际上仅考虑查询中最左边的实体的摄取时间,这显然将是某个表,因此显然会将摄取时间存储为其记录的一部分。

更新

添加此更新,因为我需要进一步说明@yifat的答案。

因此,可以说我的查询引用了三个表t1,t2,t3。我创建了以下图表来描述我的困惑:-

enter image description here

如您在图中所看到的,无论如何,当前运行实例将确保自最后一个导出游标以来将获取所有3个表的数据。那么,添加forcedLatency会有什么不同呢?该图将说明一些我没有正确理解的东西。谢谢。

1 个答案:

答案 0 :(得分:3)

连续导出将保存最后导出的数据库游标,并且每个连续导出作业仅考虑自该数据库游标以来摄取的记录。这适用于查询所引用的 all 表,无论查询包含多少表和哪个运算符。因此,如果您的查询中包含联接,建议将forcedLatency选项设置为参与联接的表的最大预期延迟。

例如,假设查询 inner 将键T上的表T1与表T2连接在一起,并且您希望两个表中相同K的记录大约在同一时间到达。现在假设在时间t0处,使用密钥K1提取到T1,在时间t2处,使用密钥K1提取到T2,并且在时间t1之间进行连续导出。在这种情况下,导出将错过结果集中的K1,因为它执行了内部联接,而T2还没有K1。下一个导出周期也将不包含该记录,因为它将仅包含t1之后提取的记录,而T1中不包含K1。强制等待时间会在游标上产生一些延迟,因此只包括早于ForcedLatency的记录。在此示例中,T1中的记录将“等待” T2中的记录。

如果导出查询只包含一个表,则无需使用ForceLatency。 如果您不希望所有表都作用于数据库游标,则可以使用“ over”参数来指定应考虑的表。如果您要连接维度表,并且希望每个查询考虑所有所有记录,这将非常有用。