将临时表从S3文件构建到Redshift

时间:2014-05-20 20:36:31

标签: mysql postgresql csv amazon-redshift

我遇到了一致的错误,试图以临时表的形式将一列数据(所有数字)从S3导入Redshift。这是我的疑问:

CREATE TEMP TABLE tmp_userid(userid bigint);
COPY tmp_userid (userid) FROM 's3://name/recent_prem_idsonly.txt'
CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=XXX';

导致:

ERROR: Load into table 'tmp_userid' failed.  Check 'stl_load_errors' 
system table for details.  SQL state: XX000`

然后跟踪显示

Error Code 1207: Invalid digit, Value '8', Pos 7, Type: Long

我注意到使用userid的数据类型进行预测会产生不同的错误,所以可能还有什么东西在那里?我已经尝试将文件保存为csv和txt。

4 个答案:

答案 0 :(得分:0)

临时表仅存在于单个连接中。 Redshift COPY使用无法查看临时表的“带外”连接加载数据。只需使用带有“_tmp”后缀的真实表格,并在完成后将其删除。

答案 1 :(得分:0)

你有没有机会引用txt / csv文件中的值?如果是,请删除它们,或在复制命令中添加“removequotes”。 (我在csv文件中的引号中收到了相同的错误。)

这甚至可以在临时表中工作,我一直这样做(将数据加载到带有副本的临时表,将它们与Redshift中的现有表连接,更新/插入Redshift中的永久表)

答案 2 :(得分:0)

我意识到这个问题是由csv驱动的,其中包含比Redshift更喜欢的[空]列。删除它们会导致临时表正确创建。

答案 3 :(得分:0)

您还可以使用与S3文件相同的架构创建TEMP表,然后使用COPY命令将数据推送到该TEMP表中

CREATE TEMP TABLE test_table 
(
  userid          VARCHAR(10)
);
    

COPY test_table (userid) FROM 's3://name/recent_prem_idsonly.txt'
CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=XXX';