如何解决SQL Server数据仓库中的特殊字符问题

时间:2019-04-17 12:04:24

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

我必须使用polybase表将数据从datalake加载到SQL Server数据仓库中。我已经创建了用于创建外部表的设置。我已经创建了外部表,正在尝试创建select * from ext_t1表,但是在????中的列中却得到了ext_table

下面是我的外部表脚本。我发现数据中有特殊字符的问题。我们如何才能转义特殊字符,而只需要使用varchar数据类型而不使用nvarchar。在这个问题上可以帮助我吗?

CREATE EXTERNAL FILE FORMAT [CSVFileFormat_Test] WITH (FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = N',', STRING_DELIMITER = N'"',DATE_FORMAT='yyyy-MM-dd', FIRST_ROW = 2, USE_TYPE_DEFAULT = True,Encoding='UTF8'))

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)

数据:(csv中A列的特殊字符如下)

ÐК Ð’ÐЗМ Завод
ÐК Ð’ÐЗМ ЗаÑтройщик

1 个答案:

答案 0 :(得分:0)

这是数据不匹配的问题,这个read可能会对您有所帮助。

外部表注意事项

创建外部表很容易,但是有一些细微之处需要讨论。

外部表是强类型的。这意味着要提取的数据的每一行都必须满足表架构定义。如果某行与架构定义不匹配,则该行将从负载中拒绝。

REJECT_TYPE和REJECT_VALUE选项允许您定义最终表中必须存在多少行或数据的百分比。加载期间,如果达到拒绝值,则加载失败。拒绝行的最常见原因是架构定义不匹配。例如,如果当文件中的数据为字符串时,错误地为一列提供了int模式,则每一行都将无法加载。

Data Lake Storage Gen1使用基于角色的访问控制(RBAC)来控制对数据的访问。这意味着服务主体必须对location参数中定义的目录以及最终目录和文件的子级具有读取权限。这使PolyBase可以验证并加载该数据。

相关问题