首页 > 解决方案 > Azure 数据工厂复制活动 - 将日期时间保存为 csv 格式错误的日期字符串

问题描述

在 Azure Synapse / Datafactory 管道期间,我尝试“简单地”将日期时间保存为 CSV 文件中的字符串。在保存日期时间之前,我想对其进行格式化,例如“2021-04-13T00:00:00.000Z”,在“T”之后总是“00:00:00.000Z”。

在复制活动中,我使用 Azure 中的 formatDateTime 函数在源中添加一个新字段并格式化日期时间,但我无法产生我期望的结果。此外,我遇到了多个我不明白的输出。

这是我为调试所做的: 在复制活动“源”中,我添加了多个新字段,这些字段以不同的方式格式化 PipelineTriggerTime,具有不同的效果。我将这些值作为接收器写入 CSV 文件。 复制活动新字段

在此处输入图像描述

下表显示了输入、动态值、预期结果和实际结果。

管道()。触发时间 动态内容 预期产出 实际输出
1 2021-04-13T11:14:33.375Z @formatDateTime(pipeline().TriggerTime, 'yyyy-MM-ddT00:00:00.000Z') 2021-04-13T00:00:00.000Z 2021 年 4 月 13 日 00:00:00
2 2021-04-13T11:14:33.375Z @formatDateTime(pipeline().TriggerTime, 'yyyy-MM-dd hh:mm:ss') 2021-04-13 11:14:33 2021-04-13 11:14:33
3 2021-04-13T11:14:33.375Z @formatDateTime(pipeline().TriggerTime, 'yyyy-MM-ddTsomeText') 2021-04-13TsomeText 2021-04-13T33o14eTexA
4 2021-04-13T11:14:33.375Z @concat(formatDateTime(pipeline().TriggerTime, 'yyyy-MM-dd'), 'T00:00:00.000Z') 2021-04-13T00:00:00.000Z 2021 年 4 月 13 日 00:00:00
5 2021-04-13T11:14:33.375Z @concat(formatDateTime(pipeline().TriggerTime, 'yyyy-MM-dd'), 'TsomeText') 2021-04-13TsomeText 2021-04-13TsomeText

老实说,对我来说唯一不令人惊讶的输出是 2 和 5。
这可以解释吗?formatDateTime 函数应该返回一个“字符串”,但它似乎做了一些不同的事情(有时)。
任何其他想法,我如何达到我的目标,将字符串“2021-04-13T00:00:00.000Z”保存到 csv Azure 复制活动中的文件?

我正在使用 Synapse Analytics,但数据工厂的效果是相同的,因此我添加了后者以接触更多人。

标签: azuredatetimeazure-data-factoryazure-synapsecopy-activity

解决方案


我可以建议使用 startOfDay() 函数而不是 formatDateTime()。

至于对您的结果的解释,这很复杂。看看 ISO 8601 标准,我在下面粘贴了一个链接。时区会影响转换/格式。如果您坚持保留 formatDateTime() 函数,或者由于某种原因 startOfDay 不适合您,我会尝试一些事情。

记录 #1) 删除格式参数末尾的 Z。- 我很好奇这是否解决了这个问题(注意 Z 是如何没有被带入记录 #2 并且你没有在该函数参数中包含 Z ?)

记录#3) 你不能在 'yyyy-MM-dd' 的末尾添加额外的文本——这就是为什么我建议你研究 ISO 8601 标准,因为这是 formatDateTime() 和 startOfDay() 都支持的。

记录 #4) 再次删除 Z,就像在 #1 中一样。但是,如果它不起作用,我还有另一个想法。可能是操作顺序的行为与我们预期的略有不同。也许 formatDateTime() 以您想要的方式对其进行格式化,然后由于某种原因,连接函数将其更改为 mm/dd/yyyy 格式,然后将其与您要添加的 0 连接起来。我不确定它为什么会这样做,但我不确定它还会是什么,所以如果不是 Z 也不是这个,那么我和你一样迷失在这个上。

最后要注意的是,如果要添加毫秒,则需要在时间的秒数之后添加小数。所以你的格式是 hh:mm:ss.sss

祝你好运!

https://en.wikipedia.org/wiki/ISO_8601


推荐阅读