【问题标题】:How to resolve Rows were rejected while reading from external source(s) in sqlserver Data warehouse如何解决从 sql server 数据仓库中的外部源读取时被拒绝的行
【发布时间】:2019-04-16 12:52:48
【问题描述】:

我必须使用 polybase 表将数据从 datalake 加载到 sql server 数据仓库。我已经创建了用于创建外部表的设置。我已经创建了外部表并尝试从 ext_t1 表中选择 *,但是我收到错误,因为从外部源读取时行被拒绝。下面是我的外部表脚本。有人可以帮我解决这个问题吗?提前致谢。

CREATE EXTERNAL TABLE [dbo].[EXT_TEST1]
( A VARCHAR(10),B VARCHAR(20)) 
(DATA_SOURCE = [Azure_Datalake],LOCATION = N'/A/Test_CSV/',FILE_FORMAT =csvfileformat,REJECT_TYPE = VALUE,REJECT_VALUE = 1)

表已创建,但在查询 select 语句后,我遇到了以下问题 从外部源读取时,行被拒绝。 在查询执行的计划步骤 2 中,外部表 [EXT_TEST1] 拒绝了 2 行: 位置:'/A/Test_CSV/abc.csv' 列序号:1,预期数据类型:VARCHAR(20) 整理 SQL_Latin1_General_CP1_CI_AS。 位置:'/A/Test_CSV/abc.csv' 列序号:1,预期数据类型:VARCHAR(20) 整理 SQL_Latin1_General_CP1_CI_AS。

【问题讨论】:

  • 仅从 SQL Server 2016 开始支持外部表。您正在使用 SQL Server 2012
  • @Venkataraman- 感谢您的回复。我只使用受支持的 sql server

标签: azure-data-lake sql-data-warehouse azure-sql-data-warehouse


【解决方案1】:

我建议您尝试以下方法。另外,请参阅troubleshooting polybase issues from SQL CAT Team 的不同方法

  • 当您有严格的拒绝时,您会收到错误,即使 单行有问题。我建议你增加 到大数字,看看数据是否为其他成功加载 行。
  • 我建议您检查 csv 文件,同时检查 csvfileformat,文件格式定义是否正确。如果文件 有带引号的字符串,那么您必须相应地指定。

  • 也可能是数据格式问题。可能有行,其中 缺少逗号,因此,您的字符串比 VARCHAR(20) 并且您遇到数据截断问题或者您的 数据类型 VARCHAR(20) 不足以保存这些值。我会 建议您相应地定义数据类型。

进一步搜索,错误是由于数据截断。您没有为 CSV 值分配足够的长度。取自Polybase to non-relational data

消息 107090,级别 16,状态 1,第 15 行查询已中止——最大值 从外部读取时达到拒绝阈值(0 行) 来源:1 行被拒绝,共 1 行已处理。 (/prices.csv)列序号:2,预期数据类型:VARCHAR(4) 整理 SQL_Latin1_General_CP1_CI_AS,违规值:价格(列 转换错误),错误:字符串或二进制数据将被截断。 当数据被截断时会发生此错误。您可能需要修改 数据类型或支持的字符数。例如,如果 该值有 4 个字符,您的数据类型是 varchar(2),您将 需要改成varchar(4)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多