2

我们有 Azure 数据工厂 v2 管道,它使用启用的 polybase 将数据从 Azure SQL 数据库传输到 Azure 数据仓库。

源表包含 null 十进制值,但当 ADF 尝试处理 null 值时,它会给出错误:

,Errors=[{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)列序数:18,C 3 DEIMAL ),违规值:\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

4

1 回答 1

2

奇怪的是,当源是数据湖存储或 blob 存储时,文档讨论了很多关于空值的内容,但当源是另一个数据库时却没有说什么。阅读 polybase 文档显示不支持 Azure SQL 数据库:https ://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-guide?view=sql-server-2017

我会尝试禁用 polybase 看看这是否能解决问题。如果确实如此,性能会降低,但可能足以满足您的需求。

使用 polybase 的另一种方法是在 Sql 数据仓库中创建一个存储过程,该过程使用 polybase 查询另一个数据库并使用数据工厂调用它,这样您就可以更好地控制 polybase 正在做什么。

希望这有帮助!:)

于 2018-05-22T14:44:29.857 回答