Я пытаюсь загрузить файл с разделителями строк с одинарными кавычками, и я могу загрузить данные, за исключением определенных записей для строки, которая содержит формат ниже. Как загрузить приведенные ниже значения с помощью PolyBase в хранилище данных SQL. Любой вклад высоко ценится.
Например:
'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)
)
В этом случае ваш разделитель строк должен быть чем-то отличным от одинарной кавычки.
Я предполагаю, что вы используете файл с разделителями-запятыми. У вас есть несколько вариантов:
Если вы собираетесь использовать собственный разделитель, я предлагаю ASCII Decimal (31) или Hex (0x1F), который специально зарезервирован для этой цели.
Если вы собираетесь использовать разделитель строк, вы можете использовать двойные кавычки (но я предполагаю, что это в ваших данных) или выбрать какой-либо другой символ.
Тем не менее, мое следующее предположение состоит в том, что вы столкнетесь с данными со встроенным возвратом каретки, и это вызовет еще один уровень проблемы. По этой причине я предлагаю вам перенести ваши извлечения во что-то другое, кроме CSV, и посмотреть на Parquet или Orc.
В настоящее время Polybase в SQLDW не поддерживается обрабатывает управляющий символ в текстовом формате с разделителями. Таким образом, вы не можете загрузить каталог файлов в SQLDW.
Чтобы загрузить файл, вы можете предварительно обработать входной файл. Во время предварительной обработки вы можете сгенерировать другой файл данных либо в двоичном формате (PARQUET или ORC, которые могут быть прочитаны каталогом поли-базой), либо другой файл с разделителями с некоторым специальным разделителем полей (любой символ, который не ожидается в вашем файле данных, например, | или ~). С таким специальным символом нет необходимости использовать экранирование/разделение значений)
Надеюсь, это поможет.
<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'} }
Спасибо Рон за ваше предложение. Двойная одинарная кавычка ('') присутствует в файле данных. Я тоже пробовал использовать 0x27, но мне это не помогло. Я использую хранилище BLOB в своем тесте, поэтому я не уверен, смогу ли я преобразовать этот CSV в файлы другого формата. Есть ли способ пропустить, если в файле есть непрерывная двойная одинарная кавычка.