在 SQL 数据仓库中(请编辑不要更改此名称,实际名称请参见:此处)我有一个JobCandidate_ext
看起来像这样的外部表。
CREATE EXTERNAL TABLE [HumanResources].[JobCandidate_ext](
[JobCandidateID] int,
[BusinessEntityID] int,
[Resume] Varchar(8000),
[ModifiedDate] Datetime
)
WITH (
LOCATION='/[HumanResources].[JobCandidate]/data.txt',
DATA_SOURCE=AzureStorage,
FILE_FORMAT=TextFile)
GO
该列[Resume]
是SQL Server 中的一种XML
类型,但在 SQL 数据仓库中,XML 类型应按此处varchar(8000)
所述转换为。
我正在使用平面文件data.txt
将数据导出到 blob,然后从中创建一个外部表。
该[Resume]
列中包含回车符(正如 XML 文件所预期的那样),因此当您运行 aSELECT * FROM [HumanResources].[JobCandidate_ext]
时会出现错误。在这种情况下:
查询中止 - 从外部源读取时达到最大拒绝阈值(0 行):在处理的总共 2 行中拒绝 1 行。
(/[HumanResources].[JobCandidate]/data.txt)列序号:0,预期数据类型:INT,违规值:一些文本....(列转换错误),错误:将数据类型 NVARCHAR 转换为 INT 时出错。
我知道在创建外部表时无法配置行分隔符,如此处所述。
行分隔符必须是 UTF-8 并受 Hadoop 的 LineRecordReader 支持。行分隔符必须是“\r”、“\n”或“\r\n”。这些不是用户可配置的。
如果您尝试在每个列字段上加上引号,则在从外部表中选择行时会出现此错误:No closing string delimiter
.
查询中止 - 从外部源读取时达到最大拒绝阈值(0 行):在处理的总共 1 行中拒绝 1 行。
(/[HumanResources].[JobCandidate]/data.txt) 列序号:2,预期数据类型:VARCHAR(8000) 整理 SQL_Latin1_General_CP1_CI_AS,违规值:'ShaiBassli(标记化失败),错误:没有结束字符串分隔符。
有没有办法解决这个问题?