我在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
答案 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:
DateTimeOffset
格式对应于Int96
,建议您在镶木地板文件的源上尝试这种传输。