Nano Hash - криптовалюты, майнинг, программирование

Экранирующий разделитель в команде Amazon Redshift COPY

Я загружаю данные из Amazon S3 в таблицу в Amazon Redshift. Таблица содержит различные столбцы, в которых некоторые данные столбцов могут содержать специальные символы.

У команды копирования есть опция Delimiter, где мы можем указать разделитель при извлечении данных в таблицу.

Вопрос 2-х кратный -

Когда я экспортирую (unload command) в S3 с использованием разделителя, скажем ,, он работает нормально, но когда я пытаюсь импортировать в Redshift из S3, возникает проблема, потому что некоторые столбцы содержат оператор ',', который команда копирования неверно интерпретирует как разделитель и выбрасывает ошибка.

Я пробовал различные разделители, но данные в моей таблице, похоже, содержат тот или иной специальный символ, который вызывает указанную выше проблему.

Я даже пробовал выгрузку с использованием нескольких разделителей - например, #% или ~,, но при загрузке из s3 с помощью команды копирования - двойной разделитель не поддерживается.

Какие-нибудь решения?

Я думаю, что разделитель можно экранировать с помощью \, но по какой-то причине он тоже не работает, или, возможно, я не использую правильный синтаксис для экранирования в команде копирования.


Ответы:


1

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

12,Shows,Musicals,Musical theatre
13,Shows,Plays,All "non-musical" theatre  
14,Shows,Opera,All opera, light, and "rock" opera
15,Concerts,Classical,All symphony, concerto, and choir concerts

Если вы загрузите файл с помощью параметра DELIMITER, чтобы указать ввод с разделителями-запятыми, команда COPY завершится ошибкой, поскольку некоторые поля ввода содержат запятые. Вы можете избежать этой проблемы, используя параметр CSV и заключив поля, содержащие запятые, в кавычки. Если символ кавычки появляется в строке, заключенной в кавычки, вам нужно избежать его, удвоив символ кавычки. Символ кавычек по умолчанию - это двойные кавычки, поэтому вам нужно будет экранировать каждую двойную кавычку дополнительной двойной кавычкой. Ваш новый входной файл будет выглядеть примерно так.

12,Shows,Musicals,Musical theatre
13,Shows,Plays,"All ""non-musical"" theatre"
14,Shows,Opera,"All opera, light, and ""rock"" opera"
15,Concerts,Classical,"All symphony, concerto, and choir concerts"


Источник: - Загрузить цитату из файла CSV


Что я использую -

COPY tablename FROM 'S3-Path' CREDENTIALS '' MANIFEST CSV QUOTE '\"' DELIMITER ',' TRUNCATECOLUMNS ACCEPTINVCHARS MAXERROR 2

Если я сделал неверное предположение, прокомментируйте, и я перефокусирую свой ответ.

13.03.2017

2

Если разделитель появляется внутри полей, используйте параметр ADDQUOTES с UNLOAD команда:

Помещает кавычки вокруг каждого выгруженного поля данных, чтобы Amazon Redshift мог выгружать значения данных, содержащие сам разделитель.

Потом:

Если вы используете ADDQUOTES, вы должны указать REMOVEQUOTES в COPY, если вы перезагружаете данные.

Популярным разделителем является вертикальная черта (|), которая редко встречается в текстовых файлах.

10.03.2017

3

Добавление CSV QUOTE as '\"' перед DELIMITER сработало для меня.

08.09.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..