我正在开发级别创建生产红移数据库的副本。我知道如何将数据从生产实例/集群卸载到s3,然后将该数据复制到我的开发实例/集群中,但前提是我一次卸载所有数据。我想做的是从每个表中复制大约1000行,以减少空间并在我的redshift实例之间传输时间。
e.g。
UNLOAD ('SELECT * FROM myschema.mytable LIMIT 1000') TO 's3://my-bucket' CREDENTIALS etcetcetc
有没有办法LIMIT
使用UNLOAD
,或者我将不得不切换到批量插入式范例?
编辑:我正在以编程方式卸载和复制一堆表,所以我不想在任何基于密钥的限制中硬编码,以防我们添加新表或更改表结构等
答案 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个文件。