如何从redshift表

时间:2015-08-21 21:10:49

标签: amazon-s3 amazon-redshift

我正在开发级别创建生产红移数据库的副本。我知道如何将数据从生产实例/集群卸载到s3,然后将该数据复制到我的开发实例/集群中,但前提是我一次卸载所有数据。我想做的是从每个表中复制大约1000行,以减少空间并在我的redshift实例之间传输时间。

e.g。

UNLOAD ('SELECT * FROM myschema.mytable LIMIT 1000') TO 's3://my-bucket' CREDENTIALS etcetcetc

有没有办法LIMIT使用UNLOAD,或者我将不得不切换到批量插入式范例?

编辑:我正在以编程方式卸载和复制一堆表,所以我不想在任何基于密钥的限制中硬编码,以防我们添加新表或更改表结构等

2 个答案:

答案 0 :(得分:8)

虽然“LIMIT”不是实际“UNLOAD”命令的一部分,但Redshift documentation on UNLOAD provides a few alternatives

  

限制条款

     

SELECT查询不能在外部SELECT中使用LIMIT子句。例如,以下UNLOAD语句将失败:

unload ('select * from venue limit 10') 
to 's3://mybucket/venue_pipe_' credentials 
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'; 
     

而是使用嵌套的LIMIT子句。例如:

unload ('select * from venue where venueid in 
(select venueid from venue order by venueid desc limit 10)') 
to 's3://mybucket/venue_pipe_' credentials 
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';
     

或者,您可以使用SELECT ... INTO或CREATE TABLE AS使用LIMIT子句填充表,然后从该表中卸载。

答案 1 :(得分:0)

如果您的表是使用分配方式创建的(除&#34;所有&#34;分配方式),则不需要限制概念。

假设您是否使用分发方式创建了表格&#34; 甚至&#34; (这是默认的分发方式)并且您有4个不同的子节点,然后在卸载时,将在Amazon S3中为每个表生成4个文件。