创建 Azure 数据工厂管道以将新记录从 DocumentDB 复制到 Azure SQL

Posted

技术标签:

【中文标题】创建 Azure 数据工厂管道以将新记录从 DocumentDB 复制到 Azure SQL【英文标题】:Create an Azure Data Factory pipeline to copy new records from DocumentDB to Azure SQL 【发布时间】:2018-01-30 13:50:55 【问题描述】:

我正在尝试找到将昨天的数据从 DocumentDB 复制到 Azure SQL 的最佳方法。

我有一个可用的 DocumentDB 数据库,它记录通过 Web 服务收集的数据。我想定期(每天)将所有 new 记录从 DocumentDB 复制到 Azure SQL DB 表。为了做到这一点,我创建并成功执行了一个 Azure 数据工厂管道,它复制日期时间 > '2018-01-01' 的记录,但我只能让它在任意日期工作 - 从来没有从变量中获取日期。

我对 DocumentDB SQL 查询的研究表明,它具有数学、类型检查、字符串、数组和地理空间函数,但没有与 SQL Server 的 getdate() 函数等效的日期时间函数。

我了解数据工厂管道有一些可访问的系统变量,包括 utcnow()。但是,我无法弄清楚如何通过成功编辑 JSON 来实际使用它们。如果我尝试只在查询中包含 utcnow(),我会从 DocumentDB 收到一个错误,即“'utcnow' 不是可识别的内置函数名”。

"query": "SELECT * FROM c where c.StartTimestamp > utcnow()",

如果我尝试使用 utcnow() 在 JSON 中构建字符串,我什至无法保存它,因为语法错误:

"query": "SELECT * FROM c where c.StartTimestamp > " + utcnow(),

我愿意尝试与数据工厂管道不同的技术,但我的 DocumentDB 中有很多数据,所以我不想放弃它,而且我对 SQL 编程更加熟悉,需要迁移那里的数据用于加入和其他分析。

每天将这些新条目复制到 Azure SQL 中的暂存表中的最简单和最好的方法是什么?

【问题讨论】:

【参考方案1】:

您使用的是 ADF V2 还是 V1?

适用于 ADF V2。 我认为您可以遵循他们推荐的增量方法,例如您可以有一个水印表(它可能在您的目标 Azure SQL 数据库中)和两个查找活动,其中一个查找将获得之前运行的水印值(它可以是日期、整数,无论​​您的审计值是什么)和另一个查找活动来获取源文档的 MAX(水印值,即日期),并有一个 CopyActivity 来获取 c.StartTimeStampLastWaterMarkValue.

我使用 Python SDK 遵循这个示例并为我工作。

https://docs.microsoft.com/en-us/azure/data-factory/tutorial-incremental-copy-powershell

【讨论】:

我使用的是 V1,因为这是我第一次尝试它时唯一的版本。我今天刚刚发现了 V2,我会尝试一下。

以上是关于创建 Azure 数据工厂管道以将新记录从 DocumentDB 复制到 Azure SQL的主要内容,如果未能解决你的问题,请参考以下文章

Azure 数据工厂复制活动失败。用户登录失败

如何使用 Azure 数据工厂管道创建容器?

管道从 Azure 数据工厂消失了?

使用 azure 数据工厂管道将 json 对象存储到 azure 表存储实体

如何在 Azure 数据工厂的 DataFlow 中获取管道的元数据?想要创建调试管道

如何使用构建管道部署 Azure 数据工厂资源?