我对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年
根据镶木地板日期类型定义,https://drill.apache.org/docs/parquet-format/#sql-types-to-parquet-logical-types日期存储为“Unix时代的天数,1970年1月1日”
ADF正在使用.net类型进行转换。根据.net类型定义,时间值以称为刻度的100纳秒单位进行测量。特定日期是自0001年1月1日午夜12:00以来的刻度数.A.D。(C.E。)https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=netframework-4.7.2
由于这个原因,似乎增加了额外的1969。但不确定这是否是一个错误。你的镶木地板数据类型是什么?是日期吗?什么是sql数据类型?你能提供复制活动的运行ID吗?或者也许是一些实木样板数据?
基于Parquet encoding definitions,不存在Date, DateTime, DateTimeOffset and String
格式,因此您无需尝试使用这些格式。
基于Azure Data Factory中的Data type mapping for Parquet files:
DateTimeOffset
格式对应Int96
,我建议你在镶木地板文件的来源上尝试这种传输。