【问题标题】:Error while transferring null decimal value to Azure Data Warehouse using polybase enabled in Azure Data Factory v2使用 Azure 数据工厂 v2 中启用的 polybase 将空十进制值传输到 Azure 数据仓库时出错
【发布时间】:2018-11-01 05:55:33
【问题描述】:

我们有 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,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

【问题讨论】:

  • 有同样的问题,源是sql查询还是存储过程?如果是,您可能需要在源和接收器之间创建映射。如果这不起作用,您可能必须禁用 polybase。

标签: azure azure-data-factory azure-sqldw azure-data-factory-2


【解决方案1】:

这很奇怪,当源是数据湖存储或 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 正在做什么。

希望这有帮助! :)

【讨论】:

  • 在 ADFv2 管道创建的接收器配置中有一项设置。我们需要取消选中“useTypeDefault”。这将传输空值而不是默认值。这解决了我们的问题
  • 太棒了!感谢分享
  • 现在我们面临空字符串值的问题。 ADF 将空字符串视为空值。有什么方法可以将treatemptyasnull 定义为false?所以我们可以将空字符串作为空字符串传输。
  • Unchek "useTypeDefault" 解决问题,谢谢提及。
猜你喜欢
  • 2020-02-16
  • 2018-09-20
  • 2020-03-06
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2017-11-02
  • 1970-01-01
相关资源
最近更新 更多