Azure 数据工厂复制活动时间戳不必要的转换

问题描述 投票:0回答:1

我将数据从 PostgreSQL 表复制到 parquet 文件。源是:SELECT * FROM ,接收器是 ADLS(Azure 数据湖 gen2)的路径。对于许多表来说,复制是循环的。复制本身有效,但所有时间戳都已在目标镶木地板文件中转换。 例如,在源表中我有:“2024-03-14 20:11:14.974813+00” - 请注意,它是 UTC 时区,在目标镶木地板中我有:“2024-03-14T13:11:14.974Z ”,相差-7h。 似乎 UTC 和部署数据工厂实例的美国东部地区之间的时区发生了变化。 转换看起来像是一个错误,因为源时间戳和目标时间戳都是 UTC。

我知道在源端将时间戳转换为字符串会有所帮助,但我使用“SELECT * FROM”和动态更改的表名,因此我无法控制任何单个列及其类型。我无法应用这样的选角。

知道如何禁用 ADF 复制活动中不必要的转换或任何解决方法吗?

更新

经过一番研究,我发现了这篇文章:https://learn.microsoft.com/en-us/answers/questions/395981/self-hosted-integration-runtime-and-in Correct-date

它表明时间戳转换是在自托管集成运行时端进行的。我使用 SHIR 从 PostgreSQL 进行摄取。 在这篇文章之后,我将部署 SHIR 的计算机上的时区更改为 UTC,这生效了! 更改后,目标镶木地板文件中的时间戳是正确的。 但这只是一种解决方法。在我的具有许多源系统的分布式环境中,为所有系统强制执行时区是有问题的。

我的第一个请求仍然有效:有没有办法在复制活动中禁用时间戳转换?

azure-data-factory
1个回答
0
投票

我尝试复制您的问题,但它对我来说工作正常,您可以在下图中看到时间没有差异。

enter image description here

镶木地板文件将日期时间转换为 UTC 并将其保存在数据字段中,不带时区。然而,parquet 文件确实将时区存储在其架构中。

  • 因此,请检查文件的镶木地板架构,它可能具有不同的时区。
  • 运行映射以读取或写入 Parquet 文件格式中日期和时间戳数据类型的字段时,时区默认为主机时区。
© www.soinside.com 2019 - 2024. All rights reserved.