我了解到,AWS不支持将给定表从一个群集直接复制到另一个群集。我们需要从一个卸载,然后再复制到另一个。但这适用于表。它也适用于架构吗?
说我有一个看起来像
的架构some_schema
|
-- table1
-- table2
-- table3
another_schema
|
-- table4
-- table5
,我想将t some_schema
复制到另一个群集,但是不需要another_schema
。如果another_schema过多(例如another_schema2
,another_schema3
,another_schema4
等,每个都有多个表),则制作快照没有任何意义
我知道我可以先做UNLOAD some_schema.table1
然后再做COPY some_schema.table1
,但是如果我只想复制整个some_schema
怎么办?
答案 0 :(得分:1)
我认为无法卸载架构,但是根据集群的大小和要复制到新集群的表的数量,您有几个选择。
创建脚本以根据您要复制的架构生成UNLOAD
和LOAD
命令
创建快照,有选择地还原表。 https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html
如果要从副本中排除的表的数量不多,则可以使用CTAS
选项BACKUP NO
将它们UNLOAD
,因此在创建快照时将不包括这些表。
对我来说,选项1看起来最简单,如果您需要任何帮助,请告诉我。
更新:
这是生成select 'unload (''select * from '||n.nspname||'.'||c.relname||''') to ''s3_location''
access_key_id ''accesskey''
secret_access_key ''secret_key''
delimiter ''your_delimiter''
PARALLEL ON
GZIP ;' as sql
from pg_class c
left join pg_namespace n on c.relnamespace=n.oid
where n.nspname in ('schema1','schema2');
语句的SQL
c.relname
如果您想为表格添加其他过滤器,请使用var load = function(){
// your jQuery code goes here
$('#hello').html('jQuery Loaded');
};
(function(window, loadCallback){
if(!window.jQuery){
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://code.jquery.com/jquery-3.3.1.min.js";
script.onload = loadCallback;
document.head.appendChild(script);
}else{
loadCallback();
}
})(window, load);
列
答案 1 :(得分:0)
我同意@ mdem7提供的解决方案。我想提供一些我认为可能对其他人有所帮助的解决方案。
有两个问题,
这是我建议的解决方案,
复制架构和表定义(意味着DDL)
我认为pg_dump命令最适合这里,它将在SQL文件中导出完整的架构定义,可以直接将其导入到另一个集群中。
pg_dump --schema-only -h your-host -U redshift-user -d redshift-database -p port > your-schema-file.sql
然后将其导入其他集群。
psql -h your-other-cluster-host -U other-cluster-username -d your-other-cluster-database-name -a -f your-schema-file.sql
复制数据
如其他答案中所建议的,unload
中的S3
和Copy
中的S3
最合适。
希望有帮助。
答案 2 :(得分:0)
您实际上只有两个选择-
mdem7建议使用UNLOAD / COPY。 我不建议使用pg_dump来获取模式,因为它将错过Redshift特定的表设置,例如DIST / SORT键+列编码。 而是查看此视图-Generate Table DDL
替代方法是您提到的从快照还原(手动或自动)。但是,在新群集联机(仍在还原时)之后,登录并删除(使用级联)所有您不需要的架构。这将停止对已删除的架构/表的还原。这种方法的唯一缺点是新群集的大小必须与原始群集相同。可能无关紧要。如果群集一旦还原就可以使用较长的时间,并且有意义的话,您可以在还原完成后向下调整其大小。