Azure 数据工厂 v2 - 从 parquet 复制到 SQL DB 的错误年份

Azure Data Factory v2 - wrong year copying from parquet to SQL DB

我在使用 Azure 数据工厂 v2 时遇到了一个奇怪的问题。有一个 Spark 作业 运行 并生成镶木地板文件作为输出,ADFv2 副本 activity 然后获取输出镶木地板并将数据复制到 Azure SQL 数据库中。除日期外,一切正常!当数据到达 SQL 时,年份是 1969 年。所以今天的日期 (2018-11-22) 将登陆为 3987-11-22。

我试过在 Date、DateTime、DateTimeOffset 和 String 之间更改源和目​​标类型,但没有成功。目前我正在更正数据库中的日期,但这并不是很理想。

我已经使用 Parquet Viewer、Spark 和 Python(桌面)打开了源 parquet 文件,它们都正确地将年份显示为 2018

根据镶木地板日期类型定义, https://drill.apache.org/docs/parquet-format/#sql-types-to-parquet-logical-types 日期存储为 "the number of days from the Unix epoch, 1 January 1970"

并且 ADF 使用 .net 类型进行转换。根据 .net 类型定义,时间值以称为滴答的 100 纳秒单位测量。特定日期是自 12:00 午夜以来的刻度数,1 月 1 日,0001 A.D。 (C.E。) https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=netframework-4.7.2

似乎是因为这个原因额外添加了 1969。但不确定这是否是一个错误。您的镶木地板数据类型是什么?是日期吗? sql 数据类型是什么? 你能提供副本 activity 运行 id 吗?或者也许是一些镶木地板示例数据?

基于Parquet encoding definitions,不存在Date, DateTime, DateTimeOffset and String格式,因此您无需尝试这些格式。

基于 Azure 数据工厂中的 Data type mapping for Parquet files

DateTimeOffset格式对应Int96,建议您在parquet文件源上尝试这种传输方式