Azure数据工厂v2-从镶木地板复制到SQL DB的年份错误

时间:2018-11-22 14:28:38

标签: azure azure-sql-database parquet azure-data-factory azure-data-factory-2

我在Azure Data Factory v2中遇到了一个奇怪的问题。有一个Spark Job正在运行并生成实木复合地板文件作为输出,然后ADFv2复制活动将输出实木复合地板并将数据复制到Azure SQL数据库中。除日期外,其他一切正常!当数据放入SQL中时,年份是1969年。因此,今天的日期(2018-11-22)将为3987-11-22。

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

我已经使用Parquet Viewer,Spark和Python(台式机)打开了源实木复合地板文件,它们都正确地将年份显示为2018

2 个答案:

答案 0 :(得分:2)

根据镶木地板日期类型定义, https://drill.apache.org/docs/parquet-format/#sql-types-to-parquet-logical-types 日期存储为“从Unix时代开始的天数, 1970年1月1日

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

由于这个原因,似乎增加了1969。但不确定这是否是错误。您的实木复合地板数据类型是什么?是日期吗?和什么是SQL数据类型? 您能否提供复制活动运行ID?还是一些镶木地板样本数据?

答案 1 :(得分:1)

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

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

enter image description here

DateTimeOffset格式对应于Int96,建议您在镶木地板文件的源上尝试这种传输。