Загрузка специального символа через Polybase - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь загрузить файл с разделителями в одинарных кавычках и могу загружать данные, за исключением определенных записей для строки, которая содержит формат ниже.Как загрузить это ниже значений, используя PolyBase в SQL Datawarehouse.Любой ввод высоко ценится.

Например:

'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)
)

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

В настоящее время Polybase в SQLDW не поддерживает обработку управляющего символа в текстовом формате с разделителями.Таким образом, вы не можете загрузить свой каталог файлов в SQLDW.

Чтобы загрузить файл, вы можете предварительно обработать ваш входной файл.Во время предварительной обработки вы можете сгенерировать другой файл данных в двоичном формате (PARQUET или ORC, который может быть прочитан с помощью poly-base) или другой файл с разделителями с некоторым специальным разделителем полей (любой символ, который не ожидается в вашем файле данных, например |или ~).С таким специальным символом нет необходимости использовать экранирование / разделение значений)

Надеюсь, что это поможет.

Из документов Azure :

<format_options> ::=  
{  
    FIELD_TERMINATOR = field_terminator  
    | STRING_DELIMITER = string_delimiter 
    | First_Row = integer -- ONLY AVAILABLE SQL DW
    | DATE_FORMAT = datetime_format  
    | USE_TYPE_DEFAULT = { TRUE | FALSE } 
    | Encoding = {'UTF8' | 'UTF16'} 
}
0 голосов
/ 07 февраля 2019

В этом случае ваш разделитель строк должен отличаться от одинарной кавычки.

Я предполагаю, что вы используете файл с разделителями-запятыми.У вас есть несколько вариантов:

  • Сделать разделитель столбцов чем-то отличным от запятой.
  • Сделать разделитель строк символом, которого нет в ваших данных
  • Используйте выходной формат, отличный от CSV, например, Parquet или Orc

. Если вы собираетесь использовать пользовательский разделитель, я предлагаю ASCII Decimal (31) или Hex (0x1F), который специально зарезервировандля этой цели.

Если вы собираетесь использовать разделитель строк, вы можете использовать двойные кавычки (но я предполагаю, что это в ваших данных) или выбрать другой символ.

Тем не менее, мое следующее предположение состоит в том, что вы столкнетесь с данными со встроенными возвратами каретки, и это вызовет еще один уровень проблем.По этой причине я предлагаю вам перенести ваши выдержки в нечто иное, чем CSV, и посмотреть на Паркет или Орка.

...