gpt4 book ai didi

sql - Azure 数据工厂查询 Mongo DB 以筛选日期

转载 作者:行者123 更新时间:2023-12-03 06:42:31 25 4
gpt4 key购买 nike

我正在从 ADFv2 查询 mongoDB,并尝试根据日期过滤数据。然而,日期以随机数字字符串的形式出现。只是想知道是否有一种方法可以在复制任务的源中动态过滤数据,因为我正在尝试以增量方式加载数据。

    [
{
"_id": {
"$oid": "5d5123dc8cf0b4453ceb2088"
},
"TemplateId": "5d3ac5c77eb20a2cf4bdf46a",
"LastUpdate": {
"$date": 1565603495299
},
"Answers": [
{
"Question": "Q001c",
"Answer": {
"_t": "System.String[]",
"_v": [
"0,In person"
]
}
},
{
"Question": "Q001a",
"Answer": {
"_t": "System.String[]",
"_v": [
"0,Yes"
]
}
},
{
"Question": "Q003a",
"Answer": {
"_t": "System.String[]",
"_v": [
"0,Yes"
]
}
},
{
"Question": "Q006a",
"Answer": {
"_t": "System.String[]",
"_v": [
"1,No"
]

SInk/Destination 位于 SQL 数据库中。任何帮助将不胜感激。

最佳答案

我重现了使用 ADF 将数据从 MongoDb 增量加载到 SQL DB 的过程。正如 @Nick.Mc.Dermaid 建议的那样,时间戳值的最大值应作为增量数据加载的水印值给出。这里遵循的方法是复制日期大于水印值的所有数据,并用日期的最大值更新水印值。这样在下一次管道运行中,增量数据将被复制。下面是详细步骤。

  • 在 MongoDB API 中,两个文档被插入到一个容器中。 enter image description here

  • 然后在 SQL 数据库中,创建 Watermark 表,如下图所示,其中 watermark value =1000000000000enter image description here水印的值设置如上,以便在第一次运行时,来自源的所有数据都会加载到接收器中。

  • 在 SQL 数据库中编写存储过程,用最新的日期值更新水印表。

create proc usp_update_watermark_table as
begin
update watermark
set watermarkvalue=(select max(LastUpdate) from tgt_table)
end
  • 在 ADF 中,进行查找事件并在其中引用水印表。从水印中选择WatermarkValue

enter image description here

  • 复制事件在查找事件之后进行。在源数据集中,采用 MongoDB API,在过滤器中,给出以下表达式来复制大于查找事件中的值的数据。
{"LastUpdate":{$gt:@{activity('LookupLastWaterMark').output.firstRow.WatermarkValue}}}

enter image description here

  • 存储过程事件添加到复制事件旁边。这样新值就会在水印表中更新。 enter image description here

  • 管道运行后,输出表和水印表会更新。 enter image description here

  • 新文档已添加到源代码中 enter image description here

  • 当管道再次触发时,只有增量记录被加载到接收器。

enter image description here

enter image description here

关于sql - Azure 数据工厂查询 Mongo DB 以筛选日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74403020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com