Есть ли способ выполнить сброс SQL из Amazon Redshift?
Не могли бы вы использовать клиентский/SQL-клиент SQL?
Есть ли способ выполнить сброс SQL из Amazon Redshift?
Не могли бы вы использовать клиентский/SQL-клиент SQL?
В настоящее время мы используем Workbench/J успешно с Redshift.
Что касается дампов, в то время, когда в Redshift нет инструмента экспорта схемы (pg_dump не работает), хотя данные всегда можно извлекать с помощью запросов.
Надеюсь помочь.
EDIT: Помните, что такие вещи, как ключи сортировки и распределения, не отражаются на коде, сгенерированном Workbench/J. Взгляните на системную таблицу pg_table_def
, чтобы просмотреть информацию о каждом поле. В нем указано, является ли поле sortkey или distkey и такой информацией. Документация по этой таблице:
http://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html
pg_dump
схем, возможно, не работал в прошлом, но он делает это сейчас.
pg_dump -Cs -h my.redshift.server.com -p 5439 database_name > database_name.sql
CAVEAT EMPTOR: pg_dump
все еще создает некоторый синтаксис postgres, а также игнорирует определения Redshift SORTKEY
и DISTSTYLE
для ваших таблиц.
Другим приемлемым вариантом является использовать опубликованные объявления AWS admin script для генерации вашего DDL. Он обрабатывает SORTKEY/DISTSTYLE, но я обнаружил, что он не работает, когда дело доходит до захвата всех FOREIGN KEY и не обрабатывает разрешения/владельцы таблиц. Ваше перемещение может отличаться.
Чтобы получить дамп самих данных, вам все равно нужно использовать UNLOAD
command для каждой таблицы.
Вот способ его создания. Имейте в виду, что синтаксис select *
не будет работать, если ваша таблица назначения не имеет того же порядка столбцов, что и исходная таблица:
select
ist.table_schema,
ist.table_name,
'unload (''select col1,col2,etc from "' || ist.table_schema || '"."' || ist.table_name || '"'')
to ''s3://SOME/FOLDER/STRUCTURE/' || ist.table_schema || '.' || ist.table_name || '__''
credentials ''aws_access_key_id=KEY;aws_secret_access_key=SECRET''
delimiter as '',''
gzip
escape
addquotes
null as ''''
--encrypted
--parallel off
--allowoverwrite
;'
from information_schema.tables ist
where ist.table_schema not in ('pg_catalog')
order by ist.table_schema, ist.table_name
;
Да, вы можете сделать это несколькими способами.
РАЗГРУЗИТЬ() в ведро S3. Это лучшее. Вы можете получить данные практически на любой другой машине. (Подробнее здесь: http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html)
Содержите содержимое вашей таблицы в файле данных, используя экземпляр Linux, который у вас есть. Итак, запуск:
$ > psql -t -A -F 'your_delimiter' -h 'hostname' -d 'database' -U 'user' -c "select * from myTable" → /home/userA/tableDataFile сделают трюк для вас.
Если вы используете Mac, я использую Postico, и он отлично работает. Просто щелкните правой кнопкой мыши по таблице и выберите export.