【问题标题】:Is there a way to do a SQL dump from Amazon Redshift有没有办法从 Amazon Redshift 进行 SQL 转储
【发布时间】:2013-03-04 15:54:17
【问题描述】:

有没有办法从 Amazon Redshift 进行 SQL 转储?

你能用 SQL workbench/J 客户端吗?

【问题讨论】:

  • 这里是亚马逊人关于该主题的 cmets:forums.aws.amazon.com/message.jspa?messageID=428466#428466
  • 你甚至可以使用像dBeaver这样的IDE来传输数据,以防你想在不完整的情况下传输数据。使用它的社区版,你应该可以这样做。注意:IDE 数据导出容易出错;这是一项通过 Python/Bash 等编程语言或其他付费实用程序来传输数据的任务。

标签: mysql sql amazon-s3 amazon-redshift dump


【解决方案1】:

pg_dump 的模式过去可能不起作用,但现在可以。

pg_dump -Cs -h my.redshift.server.com -p 5439 database_name > database_name.sql

CAVEAT EMPTOR: pg_dump 仍然会产生一些 postgres 特定的语法,并且还会忽略表的 Redshift SORTKEYDISTSTYLE 定义。

另一个不错的选择是use the published AWS admin script views 用于生成您的 DDL。它处理 SORTKEY/DISTSTYLE,但我发现它在捕获所有外键时有问题,并且不处理表权限/所有者。您的里程可能会有所不同。

不幸的是,要获得数据本身的转储,您仍然需要在每个表上使用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
;

【讨论】:

    【解决方案2】:

    我们目前正在成功地将 Workbench/J 与 Redshift 一起使用。

    关于转储,当时 Redshift 中没有可用的模式导出工具(pg_dump 不起作用),但始终可以通过查询提取数据。

    希望能提供帮助。

    编辑:请记住,排序和分配键之类的内容不会反映在 Workbench/J 生成的代码上。查看系统表pg_table_def 以查看每个字段的信息。它说明一个字段是 sortkey 还是 distkey,以及此类信息。该表上的文档:

    http://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html

    【讨论】:

    • 我也成功使用 Workbench/J 并且可以确认它正在工作。
    • 不知道你为什么说 pg_dump 不起作用;它对我来说很好,虽然正如你对 Workbench/J 所说的,distkey/sortkey 也不包括在内。
    【解决方案3】:

    是的,您可以通过多种方式做到这一点。

    1. UNLOAD() 到 S3 存储桶 - 这是最好的。您几乎可以在任何其他机器上获取您的数据。 (更多信息:http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

    2. 使用您拥有的 Linux 实例将表的内容通过管道传输到数据文件。 所以,运行:

      $> psql -t -A -F 'your_delimiter' -h 'hostname' -d 'database' -U 'user' -c "select * from myTable" >> /home/userA/tableDataFile 将为您解决问题。

    【讨论】:

      【解决方案4】:

      如果您使用的是 Mac,我使用的是 Postico,它运行良好。只需右键单击表格,然后单击导出即可。

      【讨论】:

        猜你喜欢
        • 2016-07-09
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多