Azure 数据工厂复制活动 - 将日期时间保存到 csv 格式错误的日期字符串

问题描述

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

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

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

Copy Activity new fields

enter image description here

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

pipeline().TriggerTime 动态内容 预期输出 实际输出
1 2021-04-13T11:14:33.375Z @formatDateTime(pipeline().TriggerTime,'yyyy-MM-ddT00:00:00.000Z') 2021-04-13T00:00:00.000Z 04/13/2021 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 04/13/2021 00:00:00
5 2021-04-13T11:14:33.375Z @concat(formatDateTime(pipeline().TriggerTime,'TsomeText') 2021-04-13TsomeText 2021-04-13TsomeText

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

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

解决方法

我是否建议使用 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...