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

问题描述 投票:0回答:1

我必须使用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列的特殊字符如下)

ÐК Ð’ÐЗМ Завод
ÐК Ð’ÐЗМ ЗаÑтройщик
sql-server-2016 azure-data-lake azure-sql-data-warehouse
1个回答
0
投票

这是数据不匹配问题,这个read可能会帮助你。

外表考虑因素

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

外部表格是强类型的。这意味着被摄取的每一行数据必须满足表模式定义。如果行与架构定义不匹配,则从加载中拒绝该行。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.