创建 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 数据工厂管道将 json 对象存储到 azure 表存储实体