Есть ли способ загрузить CSV с данными, состоящими из одинарных кавычек, двойных кавычек и новой строки? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть .csv с данными, как показано ниже

1234|Player's| Team, be on time to collect the
prizes|2019:02:02
1235|Player's|<body ref="tag">|2019:02:03

Я пытаюсь выполнить команду копирования для загрузки данных в хранилище Snowflake.

Запись не удалась с позиции [id] в строке номер 2.

Для решения этой проблемы предусмотрена цитата для данных новой строки с двойными кавычками, но затем это не удалось в 3-й строке ("тег").

1 Ответ

1 голос
/ 05 июня 2019

@ kuldeep - Вы не можете загрузить эти данные, так как символы новой строки используются как разделитель строк, а также как значение в данных.Вам нужно экранировать новые строки перед экспортом данных, а затем упомянуть символ экранирования в формате файла Snowflake перед загрузкой их в DW.

Когда вы экспортируете эти данные из исходной системы в S3 / blob, убедитесь, что вы добавили кавычки и как escape-символ.Это обеспечило бы (1) экранирование символов новой строки и заключение в кавычки в строке 1 (2) кавычки тегов экранируются, а затем заключаются в кавычки в строке 2. Если данные относятся к конкретной таблице, вы можете просто создать определенный формат файла в Snowflake.для таблицы и использовать его вместе с оператором копирования.Например, выберите формат файла CSV с обратной косой чертой в качестве escape-символа и необязательно вложенным полем, установленным в двойные кавычки.

 CREATE FILE FORMAT CSV_ESC_DQ TYPE = 'CSV'  COMPRESSION = 'AUTO'
   FIELD_DELIMITER = ',' RECORD_DELIMITER = '\n' SKIP_HEADER = 0
   FIELD_OPTIONALLY_ENCLOSED_BY = '\042' TRIM_SPACE = FALSE
   ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE ESCAPE = '\134'
   ESCAPE_UNENCLOSED_FIELD = '\134' DATE_FORMAT = 'AUTO' 
   TIMESTAMP_FORMAT= 'AUTO' NULL_IF = ('\\N');

   copy into table_name from @stage/path_to_file/
   file_format=csv_esc_dq;
...