Как сохранить вывод Amazon Redshift в локальный CSV-файл с помощью SQL Workbench?

Я пишу psql через Amazon Redshift, и теперь я пытаюсь сохранить вывод как CSV через запрос PSQL в SQL Workbench Причина, по которой я планирую сделать это через запрос вместо использования предложения select, а затем щелкните правой кнопкой мыши, чтобы сохранить вывод как csv , потому что существует большой объем данных, я обнаружил, что если я сгенерирую вывод во временную таблицу, это будет намного быстрее, чем использование select для отображения всего вывода. Поэтому я думаю, может ли сохранение в локальный CSV быть быстрее.

Я пробовал лучшее решение здесь, однако он не работает на Amazon Redshift. Когда я использую Copy (SELECT col1, col2 FROM my_table) TO '[my local csv path]' WITH CSV DELIMITER ','; или пробовал \Copy, он продолжал показывать мне

Amazon Invalid operation: синтаксическая ошибка около "("

or

Amazon Invalid operation: синтаксическая ошибка около символа "\"

Затем я проверил руководство по запросам Amazon Redshift, но не найдите любое предложение, которое может сохранить вывод в локальный CSV. Кажется, что COPY - это копирование данных из источника данных Amazon в Redshift, UNLOAD - сохранение данных в s3, но я просто хочу сохранить данные на своей локальной машине.

Итак, есть ли способ сохранить вывод Redshift в мой локальный CSV, но с помощью SQL Workbench?


person Cherry Wu    schedule 22.05.2017    source источник


Ответы (3)


Попробуйте запустить в Workbench одно из следующих действий.

WbExport -type=text
         -file='C:\Downloads\myData.txt'
         -delimiter='\t'
         -decimal=','
         -dateFormat='yyyy-MM-dd';
select a, b ,c from myTable;

WbExport -type=text
     -file='C:\Downloads\myQuery.txt'
     -delimiter='\t'
     -header=true
     -tableWhere="WHERE a is not null and date between 11/11/11 and 22/22/22"
     -sourcetable=mytable;
person Vivek    schedule 05.02.2018
comment
Я внес незначительные изменения в ваше решение, и, наконец, оно работает для меня. Не могли бы вы добавить ; после -dateFormat='yyyy-MM-dd'? Иначе не получится. Большое тебе спасибо! - person Cherry Wu; 05.02.2018
comment
Я использовал первое предоставленное вами решение, но получил следующую ошибку: ОШИБКА [42601] [Amazon] [Amazon Redshift] (30) Произошла ошибка при попытке выполнить запрос: [SQLState 42601] ОШИБКА: синтаксическая ошибка в строке WbExport или рядом с ней. 1: WbExport -type = текст ^. Есть идеи? Спасибо! - person CathyQian; 22.04.2019
comment
@CathyQian Можете ли вы поместить его в одну строку и посмотреть, улучшено ли сообщение об ошибке rr, если вы можете опубликовать свой короткий запрос формы, - person Vivek; 24.04.2019

Да, есть, попробуйте это.

PGPASSWORD=<password> psql -h <host> -d <db> -U <user> -p 5439-a -c "select * from <table>" -F '<delimiter>' -o temp.csv
person Ravi    schedule 23.05.2017
comment
Большое тебе спасибо! Мои данные - это временная таблица, и я работаю над SQL WorkBench. Поэтому использование терминала в этом случае может не работать. Только что добавил, что в вопросе я использую SQL WorkBench. Есть ли способ написать запрос psql через SQL WorkBench и сохранить результат в локальный CSV? - person Cherry Wu; 23.05.2017
comment
Я не являюсь экспертом в использовании инструментов, но я вижу, что как только вы получите набор результатов в рабочей среде, вы можете сохранить данные, используя пункт меню Data - ›Save Data As -›?, Кстати, красное смещение не поддерживает все способы загрузки и выгрузки postgres - person Ravi; 24.05.2017
comment
Я не мог использовать сохранение через рабочий стол, потому что предложение select может работать там вечно, но сохранение в файл может быть намного быстрее .... поэтому я прошу любой доступный запрос ~ В любом случае, спасибо за помощь! - person Cherry Wu; 24.05.2017

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

#!/bin/zsh 
#we are assuming you are not appending to each file and you don't need header
out_put='/tmp/output.csv'
#be very careful here rm -rf is very dangerous 
rm -rf $out_put

PGPASSWORD='YOUR_PASSWORD' psql -h YOUR_STUFF-cluster-1.YOUR_STUFF.us-east-1.redshift.amazonaws.com -p YOUR_PORT_NUMBER -d YOUR_DATABASE -U YOUR_USER_NAME -A -t -c "select * from SOME_TABLE limit 10" -F ',' -o $out_put


echo "your file is ready" $out_put
person grepit    schedule 26.10.2020