azure 在ADX中使用effectiveDateTime进行回填,该值取决于当前正在加载的数据

2w2cym1i  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(136)

这是一个场景:
1.我们有一个m_阅读表,每天我们将在其中摄取24个读数。
1.在24个读数中,23个是当天的读数,而1个是前一天的读数。
1.实体化视图应该聚合天数数据。
1.业务用户可以接受当天的部分聚合,但是一旦数据在第二天可用,就必须刷新数据。
这里我们打算使用回填属性。从文档中我们可以看到,我们可以使用effectiveDateTime
但是在示例中,我们看到有效的DateTime总是硬编码的。例如

.create async materialized-view with (backfill=true, effectiveDateTime=datetime(2019-01-01)) CustomerUsage on table T 
{
    T 
    | extend Day = bin(Timestamp, 1d)
    | summarize count(), dcount(User), max(Duration) by Customer, Day
}

我们是否可以从某个地方传递,或者甚至取决于当前的负载行为。
在我们的示例中,如果当前加载的数据是2023年4月28日的,则effectiveDateTime应该是2023年4月27日。
提前感谢你的指点。

Update 1:感谢@Anvera的文档
根据Anvera的回复,我得出如下结论:

  • 回填仅在创建MV时适用
  • MV对新摄取的数据(增量数据)进行聚合。参考这里。

这让我想到了一个问题,如何强制MV刷新(或重新聚合)数据,同时考虑到已经加载的数据(在我们的例子中是昨天的数据)

1yjd4xko

1yjd4xko1#

实体化视图将始终根据视图定义聚合数据。如果前一天存在已经具体化(聚合)的迟到达数据,则具体化过程将用新数据更新该天。你不需要强迫它重新聚合,它会自动发生。

i7uaboj4

i7uaboj42#

在您的方案中,这些属性不适用。创建实体化视图需要这些属性。创建实体化视图时,可以决定是否要“实体化”源表中已存在的数据。如果是,则指定属性“回填=true”,这将具体化表中的所有数据。如果要将其限制为特定时间,还可以指定effectiveDateTime属性。
请注意,所有历史数据都必须在该高速缓存中,因此您需要确保适当地调整缓存策略。
请参阅文档的本节中的更多详细信息
对于数据到达较晚的情况,那么就像Yifat所说的,它会基于视图定义正确聚合,如果聚合是基于Timestamp列,那么不管数据何时到达,它都会更新属于Timestamp所属的特定Day的正确聚合记录。

相关问题