我们有Azure Data Factory v2管道,它使用polybase启用将数据从Azure SQL数据库传输到Azure数据仓库 .
源表包含空十进制值,但是当ADF尝试处理空值时,它会给出错误:
,错误= [{Class = 16,Number = 107090,State = 1,Message = Query aborted - 从外部源读取时达到最大拒绝阈值(0行):处理的总共1行中有1行被拒绝 . \ n(/24b40621-2542-4406-8f32-7854fe030292/Polybase/data_24b40621-2542-4406-8f32-7854fe030292_b592f424-dd7b-47af-925f-a2934aea4b67.txt)列序数:7,预期数据类型:DECIMAL(18, 3),违规值:\ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \
我们可以通过在源查询中使用ISNULL(COLUMNNAME,0)轻松解决此错误,但我们不希望这样做 .
在Azure官方反馈网站上,这个问题似乎正在审查中 . https://feedback.azure.com/forums/307516-sql-data-warehouse/suggestions/10600192-polybase-fix-file-format-type-default-for-decima
1 回答
奇怪的是,当源是数据湖存储或blob存储时,文档会讨论很多关于空值的文档,但是当源是另一个数据库时,文档没有说明 . 读取polybase文档显示不支持Azure SQL数据库:https://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-guide?view=sql-server-2017
我会尝试禁用polybase,看看这是否解决了这个问题 . 如果确实如此,性能会下降,但可能足以满足您的需求 .
使用polybase的另一种方法是在Sql Data Warehouse中创建一个存储过程,该存储过程使用polybase查询另一个数据库并使用Data Factory调用它,这样您就可以更好地控制polybase正在执行的操作 .
希望这有帮助! :)