在多个 Azure 数据工厂管道中,其中一项活动是“复制活动”,它使用 Azure Cosmos DB for NoSQL 作为源,并使用 JSON 格式 作为接收器的 Azure Data Lake Storage Gen2。 CosmosDB 中存储的日期使用各种日期时间偏移,例如2023-11-02T00:00:00-04:00
并保留日期偏移量,复制活动源未选中
Detect Datetime
(如此处和此处所述。此配置工作正常,并且这些活动生成的 Json 文件确实保留了日期时间偏移量。如果此复选框/属性保持选中状态,所有日期时间都会转换为 UTC 偏移量,例如,
2023-11-02T00:00:00-04:00
将变为 2023-11-02T04:00:00+00:00
,这是准确的日期时间即时值,但偏移量会丢失,这就是 CosmosDB 所在的所有复制活动的原因。源代码未选中此属性,这在代码中显示为 "detectDatetime": false
"source": {
"type": "CosmosDbSqlApiSource",
"preferredRegions": [],
"detectDatetime": false
},
用于连接到 CosmosDB 的链接服务正在使用从密钥保管库获取的密钥。为了减少配置和密钥轮换的麻烦,我们正在切换到系统分配的托管身份验证
。一切正常,除了 Detect Datetime
设置被完全忽略,并且 JSON 接收器中的所有日期都“转换”为 UTC 偏移量。显然,管道比仅一个复制活动复杂得多,但这种行为已通过两个简单的管道单独得到证实,每个管道仅使用一个复制活动,以 CosmosDB 作为源,以 JSON 格式作为接收器的 Data Lake Gen2。唯一的区别是,一种对 CosmosDB 使用基于密钥的身份验证,而另一种则使用基于托管身份的身份验证。是否有 UI 中未公开的属性需要传递?
我们已就此行为与产品团队进行了协商,并且 在我们的环境中复制后,他们确认这是一个 使用系统管理身份验证时的已知问题。在这个 场景中,Azure 数据工厂 (ADF) 默认使用 SDK V3 来执行 复制活动,且该版本的SDK不支持Detect SDK 级别的日期时间。 Account Key不使用SDK V3, 这就是为什么在这种情况下检测日期时间受到尊重。
我们已将您的意见分享给产品团队,他们将 进行进一步测试以确定并实施修复。现在, 没有预计到达时间 (ETA),并且该产品 团队表示,目前,确保检测的唯一方法 DateTime 是通过使用帐户密钥选择方法来实现的。