我遇到了一致的错误,试图以临时表的形式将一列数据(所有数字)从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。
答案 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';