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