首页 > 解决方案 > Azure 数据工厂 - 使用动态时间戳查询 Cosmos DB

问题描述

我想在 Cosmos DB 中创建和维护集合的快照。

定期,我只想从 Cosmos 中检索增量(新的或修改的文档)并将它们写入快照,快照将存储在 Azure 数据资源管理器集群中。

我希望使用文档的 _ts 成员来获取增量。换句话说,我将只获取 _ts 在某个范围内的记录。

范围将是时间窗口的范围,我在数据工厂中使用翻转窗口触发器获得。

问题是,如果我打印在查询中创建的动态时间戳,并将它们硬编码到查询中,它就可以工作。但是如果我让查询生成它们,我不会得到任何结果。

例如:

我正在使用这些值来模拟触发器的窗口范围。

在此处输入图像描述

我使用这个查询在 unix 时间创建时间戳。

在此处输入图像描述

我看到创建的时间戳是正确的。

在此处输入图像描述

如果我使用那些硬编码的时间戳运行我的查询,我会得到结果

在此处输入图像描述

但是,如果我使用刚刚创建这些时间戳的代码运行查询,我不会从查询中得到任何结果

在此处输入图像描述

这是创建时间戳的代码:

select 
DateTimeToTimestamp('@{formatDateTime('2020-05-20T12:00:00.0000000Z','yyyy-MM
ddTHH:mm:ss.fffffffZ')}')/1000,
DateTimeToTimestamp('@{formatDateTime('2020-08-20T12:00:00.0000000Z','yyyy-MM
ddTHH:mm:ss.fffffffZ')}')/1000

有没有人知道可能是什么问题?

任何其他方式来实现这一点也是受欢迎的。

谢谢

编辑:我设法通过采用另一个更简单的选项来解决这个问题:

where TimestampToDateTime(c._ts*1000)> "@{formatDateTime(pipeline().parameters.windowStart,'yyyy-MM-ddTHH:mm:ss.fffffffZ')}"

标签: azure-data-factory

解决方案


我们很高兴您解决了这个问题:

您设法通过采用另一个更简单的选项来解决此问题:

where TimestampToDateTime(c._ts*1000)> "@{formatDateTime(pipeline().parameters.windowStart,'yyyy-MM-ddTHH:mm:ss.fffffffZ')}"

c.ts我认为第一个选项中的错误主要是由和之间的不同数据类型引起的DateTimeToTimestamp('@{formatDateTime('2020-05-20T12:00:00.0000000Z','yyyy-MM ddTHH:mm:ss.fffffffZ')}')/1000


推荐阅读