0

我正在尝试加载单引号字符串分隔的文件,并且我能够加载数据,但包含以下格式的字符串的某些记录除外。如何在 SQL 数据仓库中使用 PolyBase 加载以下值。任何输入都受到高度赞赏。

例如:

'Don''t Include'
'1'''
'Can''t'
'VM''s' 

外部文件格式:

CREATE EXTERNAL FILE FORMAT SAMPLE_HEADER
with (format_type=delimitedtext,
format_options(
FIELD_TERMINATOR=',',
STRING_DELIMITER='''',
DATE_FORMAT='yyyy-MM-dd HH:mm:ss',
USE_TYPE_DEFAULT=False)
)
4

2 回答 2

0

在这种情况下,您的字符串分隔符需要不是单引号。

我假设您使用的是逗号分隔的文件。你有几个选择:

  • 使您的列分隔符不是逗号。
  • 使您的字符串定界符成为您的数据中不存在的字符
  • 使用 CSV 以外的输出格式,例如 Parquet 或 Orc

如果您要使用自定义分隔符,我建议使用 ASCII Decimal(31) 或 Hex(0x1F),这是专门为此目的而保留的。

如果您要使用字符串分隔符,您可以使用双引号(但我猜这是在您的数据中)或选择其他字符。

也就是说,我的下一个猜测是您将遇到带有嵌入式回车的数据,这将导致另一层问题。出于这个原因,我建议您将数据提取移至 CSV 以外的其他内容,并使用 Parquet 或 Orc。

于 2019-02-07T01:55:54.673 回答
0

目前,SQLDW 中的 Polybase不支持处理分隔文本格式的转义字符。所以你不能在 SQLDW 中加载你的文件目录。

为了加载您的文件,您可以预处理您的输入文件。在预处理过程中,您可以生成另一个二进制格式的数据文件(PARQUET 或 ORC,这些文件可由 poly-base 读取的目录)或另一个带有一些特殊字段分隔符的分隔文件(数据文件中不需要的任何字符,例如 |或〜)。有了这样的特殊字符,就不需要使用转义/分隔值)

希望它有所帮助。

来自 Azure 文档

<格式选项> ::=  
{  
    FIELD_TERMINATOR = field_terminator  
    | STRING_DELIMITER = 字符串分隔符
    | First_Row = 整数——只有 SQL DW 可用
    | DATE_FORMAT = 日期时间格式  
    | USE_TYPE_DEFAULT = { 真 | 错误的 }
    | 编码 = {'UTF8' | 'UTF16'}
}
于 2019-02-07T16:09:23.423 回答