[英]AWS Redshift alter append command not working for inserting data
我必須定期將記錄插入 Redshift 表。 所以我選擇了將 s3 數據復制到階段表中,然后使用 alter append 命令將階段表數據復制到實際表中的策略 append。 就我而言。
階段表 - URL_DATA_TEMP
實際表 - URL_METADATA
現在,我使用相同的命令創建了兩個表,並且只更改了表名。 前任:
CREATE TABLE _360_model.URL_METADATA
(
URL VARCHAR(8000),
URL_MD5 VARCHAR(300),
INDEX VARCHAR(200),
ASSET_TYPE VARCHAR(200)
);
CREATE TABLE _360_model.URL_DATA_TEMP
(
URL VARCHAR(8000),
URL_MD5 VARCHAR(300),
INDEX VARCHAR(200),
ASSET_TYPE VARCHAR(200)
);
仍然當我嘗試使用以下 append 命令時,它會抱怨。
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.
我無法理解當我使用幾乎相同的命令創建表時,列結構怎么會不同。
這可能來自列壓縮差異。 在復制命令中,您是否使用“COMPUPDATE ON”選項,如下所示? 如果是這樣,您的臨時表的列壓縮選項可能與目標表不同。
copy <table name> from 's3://<data location>'
CREDENTIALS <creds>
region <region>
GZIP
CSV
IGNOREHEADER 1
TIMEFORMAT 'auto' manifest
COMPUPDATE ON;
我遇到了類似的問題並做了以下事情。
1)使用復制命令加載數據並打開COMPUPDATE
請參閱: http : //docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-load.html#copy-compupdate
2)加載完成后,使用下面的查詢查看應用的自動壓縮。
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = '<table name>';
請參閱: http : //docs.aws.amazon.com/redshift/latest/dg/t_Compressing_data_on_disk.html
3)使用與登台表相同的壓縮重新創建目標表。
create table <target table name> (
<column name> <type> encode <encoding>,
...
)
請參閱: http : //docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html
其他表屬性(如sortkey)需要在staging和target表中匹配。
我無法使用您提供的SQL重新創建問題(使用psql
)。
嘗試使用psql
運行SQL,看看你的工具是否以某種方式改變了提交的SQL。
這可能是由於目標表和暫存表的壓縮類型不同所致。 有時由於目標表和登台表中的排序鍵不同,它會發生。 解決步驟:
在 redshift 中:顯示表“目標表名稱”。 這樣會生成目標表名的DDL語句
刪除臨時表:drop table 'staging table name'
使用1命令生成的DDL命令重新創建暫存表,只需將表名替換為暫存表名即可
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.