我必须使用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列的特殊字符如下)
ÐК Ð’ÐЗМ Завод
ÐК Ð’ÐЗМ ЗаÑтройщик
答案 0 :(得分:0)
这是数据不匹配的问题,这个read可能会对您有所帮助。
外部表注意事项
创建外部表很容易,但是有一些细微之处需要讨论。
外部表是强类型的。这意味着要提取的数据的每一行都必须满足表架构定义。如果某行与架构定义不匹配,则该行将从负载中拒绝。
REJECT_TYPE和REJECT_VALUE选项允许您定义最终表中必须存在多少行或数据的百分比。加载期间,如果达到拒绝值,则加载失败。拒绝行的最常见原因是架构定义不匹配。例如,如果当文件中的数据为字符串时,错误地为一列提供了int模式,则每一行都将无法加载。
Data Lake Storage Gen1使用基于角色的访问控制(RBAC)来控制对数据的访问。这意味着服务主体必须对location参数中定义的目录以及最终目录和文件的子级具有读取权限。这使PolyBase可以验证并加载该数据。