0

我必须使用 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。

4

1 回答 1

0

我建议你尝试下面的事情。此外,请参阅SQL CAT 团队对 polybase 问题进行故障排除的不同方法

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

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

在进一步搜索中,错误是由于数据截断造成的。您没有为 CSV 值分配足够的长度。取自Polybase 到非关系数据

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

于 2019-04-17T05:02:17.800 回答