我们有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
答案 0 :(得分:1)
很奇怪,当source是数据湖存储或blob存储时,文档会讨论很多关于null的内容,但是当source是另一个数据库时,它并没有说出什么。读取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正在做什么。
希望这有帮助! :)