从sqlserver数据仓库中的外部源读取数据时,如何解决行被拒绝的问题

时间:2019-04-16 12:52:49

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

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

表已创建,但在查询选择语句后,出现以下问题 从外部来源读取时,行被拒绝。 在查询执行的计划步骤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。

1 个答案:

答案 0 :(得分:0)

我建议您尝试以下操作。另外,请参见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)。