Подтвердить что ты не робот

Есть ли способ сделать SQL-свалку из Amazon Redshift

Есть ли способ выполнить сброс SQL из Amazon Redshift?

Не могли бы вы использовать клиентский/SQL-клиент SQL?

4b9b3361

Ответ 1

В настоящее время мы используем 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

Ответ 2

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
;

Ответ 3

Да, вы можете сделать это несколькими способами.

  • РАЗГРУЗИТЬ() в ведро 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 сделают трюк для вас.

Ответ 4

Если вы используете Mac, я использую Postico, и он отлично работает. Просто щелкните правой кнопкой мыши по таблице и выберите export.