我刚刚开始学习Data Factory,我有一个非常简单的管道,即将CSV文件从Azure Blob存储加载到Azure SQL数据仓库中。
源CSV文件第3列包含MM/dd/yyyy
格式的日期,而我的目标SQL DW表将此列键入为日期。
我的管道失败并出现以下错误,大概是因为我不在美国,所以隐式类型转换将不起作用:
活动BlobToSQLDW失败:ErrorCode = FailedDbOperation,'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message =将数据加载到SQL Data Warehouse中时发生错误。,Source = Microsoft.DataTransfer.ClientLibrary,''Type = System .Data.SqlClient.SqlException,Message = HdfsBridge :: recordReaderFillBuffer-填充记录读取器缓冲区时遇到意外错误:HadoopSqlException:将数据类型VARCHAR转换为DATETIME时出错。,Source = .Net SqlClient数据提供程序,SqlErrorNumber = 107090,Class = 16,ErrorCode = -2146232060,State = 1,Errors = [{Class = 16,Number = 107090,State = 1,Message = HdfsBridge :: recordReaderFillBuffer-填充记录读取器缓冲区时遇到意外错误:HadoopSqlException:将数据类型VARCHAR转换为DATETIME时出错。 },],'
我尝试对Blob源的模式进行编辑,包括设置格式和区域性(请参见下面的屏幕截图),但无济于事。
Azure Blob存储架构屏幕截图:
我确实设法解决了这个问题,方法是在SQL DW中创建一个临时表,将所有列都键入varchar,然后更改ADF管道以使其为目标,然后我使用T-SQL插入(到目标)进行类型转换。
我敢肯定,在ADF中有正确的方法可以做到这一点。有人可以请教吗?
答案 0 :(得分:0)
日期仅在SQL类型数据源(Azure SQL,SQL Server)中受支持。在其他数据集中,只有DateTime可用。我在blob数据集架构中找不到日期选项,可以再次检查它是否是blob数据集?
答案 1 :(得分:0)
这是因为ADF使用Polybase将文件数据加载到SQL DW。根据官方文档,Polybase的默认日期格式为yyyy-MM-dd。我没有找到任何方法在ADF复制活动属性或源数据集属性中指定日期格式。唯一的选择是禁用Polybase,它将起作用。您应该在“复制活动”属性的“接收器”选项卡中取消选中“允许Polybase”。