Mysql 从S3文件到红移构建临时表
我在试图以临时表的形式将S3中的一列数据(全部为数字)导入到红移中时遇到了一致的错误。我的问题是:Mysql 从S3文件到红移构建临时表,mysql,postgresql,csv,amazon-redshift,Mysql,Postgresql,Csv,Amazon Redshift,我在试图以临时表的形式将S3中的一列数据(全部为数字)导入到红移中时遇到了一致的错误。我的问题是: 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 ta
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。临时表仅存在于单个连接中。红移复制使用无法查看临时表的“带外”连接加载数据。只需使用一个带有“\u tmp”后缀的实际表格,完成后将其删除。在txt/csv文件中的值周围是否有引号?如果是,请删除它们,或将“removequotes”添加到复制命令中。(我在csv文件中收到了与引号相同的错误。)
即使使用临时表,这也应该有效,我一直都在这样做(用copy将数据加载到临时表,用Redshift将它们与现有表连接,用Redshift更新/插入到永久表)我意识到这个问题是由csv驱动的,它的[empty]列比Redshift喜欢的多。删除它们会正确创建临时表。您还可以创建一个与S3文件具有相同架构的临时表,然后使用COPY命令将数据推送到该临时表
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';
它是否与
创建临时表tmp_userid(userid文本)一起工作代码>?然后,我会在您的文件中查找无效数据,就像错误消息所建议的那样。它不会-我收到相同的错误,代码不同,表示“字符串长度超过DDL长度”。不幸的是,在这个查询中围绕相同的错误集转来转去:CREATE TABLE userid_tmp(userid bigint);从“s3://name/recent\u prem\u idsonly.txt”CREDENTIALS“aws\u access\u key\u id=XXX”复制userid\u tmp(userid);aws_secret_access_key=XXX';现在有什么错误?您可能需要向加载数据的用户授予访问新表的权限。我认为这不是真的。你可以使用一个连接来运行一个带有多个SQL命令的脚本,包括创建一个临时表并复制到其中,我已经完成了,它可以工作了。不,只是文件中的整数。