Azure Data Factory v2 - 从镶木地板复制到SQL DB的错误年份

问题描述 投票:2回答: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年

azure azure-sql-database parquet azure-data-factory azure-data-factory-2
2个回答
2
投票

根据镶木地板日期类型定义,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吗?或者也许是一些实木样板数据?


1
投票

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

基于Azure Data Factory中的Data type mapping for Parquet files

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.