Sql AWS红移alter append命令不用于插入数据
我必须定期在红移表中插入记录。 所以我选择了这样一种策略:将s3数据复制到stage表中,然后使用ALTERAPPEND命令将stage表数据附加到实际表中。 就我而言 阶段表-URL\u数据\u温度 实际表-URL\u元数据 现在,我使用相同的命令创建了两个表,并且只更改了表名。 例: 但当我尝试使用以下append命令时,它仍会抱怨Sql AWS红移alter append命令不用于插入数据,sql,amazon-web-services,amazon-redshift,Sql,Amazon Web Services,Amazon Redshift,我必须定期在红移表中插入记录。 所以我选择了这样一种策略:将s3数据复制到stage表中,然后使用ALTERAPPEND命令将stage表数据附加到实际表中。 就我而言 阶段表-URL\u数据\u温度 实际表-URL\u元数据 现在,我使用相同的命令创建了两个表,并且只更改了表名。 例: 但当我尝试使用以下append命令时,它仍会抱怨 alter table _360_model.URL_METADATA append from _360_model.URL_DATA_TEMP; error
alter table _360_model.URL_METADATA append from _360_model.URL_DATA_TEMP;
error: Columns don't match.
code: 8001
context: Column "asset_type" has different attributes in the source table
and the target table. Columns with the same name must have the same
attributes in both tables.
我无法理解当我使用几乎相同的命令创建表时,列结构如何会有所不同。我无法使用您提供的SQL(使用
psql
)重新创建问题
尝试使用
psql
运行SQL,查看您的工具是否以某种方式更改了提交的SQL。这可能是由于列压缩差异造成的。在copy命令上,是否使用如下所示的选项“computepdate On”?如果是这样的话,那么您的暂存表的列压缩选项可能与目标表不同
copy <table name> from 's3://<data location>'
CREDENTIALS <creds>
region <region>
GZIP
CSV
IGNOREHEADER 1
TIMEFORMAT 'auto' manifest
COMPUPDATE ON;
从's3://'复制
资格证书
区域
GZIP
CSV
信号头1
时间格式“自动”清单
计算更新;
我遇到了类似的问题,并做了以下工作
1) 使用“复制”命令加载数据并启用“计算更新”
见:
2) 加载完成后,使用下面的查询查看应用的自动压缩
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = '<table name>';
选择“列”、类型、编码、distkey、sortkey
来自pg_table_def,其中tablename='';
见:
3) 使用与暂存表相同的压缩重新创建目标表
create table <target table name> (
<column name> <type> encode <encoding>,
...
)
创建表(
编码
...
)
见:
其他表属性(如sortkey)需要在暂存表和目标表中匹配。列名索引是否损坏?索引是保留字,但可能带有引号或其他内容?您是否检查了列编码、分发键等是否相同?尝试运行select trim(tablename)as table,“column”,trim(type)as type,encoding,distkey,sortkey,“notnull”,从pg_table_def中选择tablename in('URL_METADATA','URL_DATA_TEMP');为了比较它们,您的查询对我来说工作得很好,您应该检查您是否以与您在这里提到的相同的方式创建表。
create table <target table name> (
<column name> <type> encode <encoding>,
...
)