如何从redshift表中卸载1000行

ada*_*vea 4 amazon-s3 amazon-redshift

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

例如

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

有没有办法做到这一点LIMITUNLOAD,还是我将不得不切换到批量插入式的范例?

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

Mar*_*eth 8

虽然"LIMIT"不是实际"UNLOAD"命令的一部分,但UNLOAD上的Redshift文档提供了一些替代方案:

限制条款

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>'; 
Run Code Online (Sandbox Code Playgroud)

而是使用嵌套的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>';
Run Code Online (Sandbox Code Playgroud)

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

  • 我能够通过创建只有1000行的临时表来完成我正在做的事情,然后卸载那些表而不是完整的表.例如,CREATE TEMPORARY TABLE temp_table_for_loading_things AS SELECT*FROM schema.table_to_copy LIMIT 1000; UNLOAD('SELECT*FROM temp_table_for_loading_things')TO's3:// tmp_bucket'CREDENTIALS'aws_access_key_id = KEY; aws_secret_access_key = PASS'GZIP DELIMITER'\ t'; (3认同)
  • 或者你也可以做`unload('select temp.* from (select col1, col2 fromvenue order byvenueid desc limit 10 as temp') to 's3://' ...` (2认同)