Mysql 如何将csv数据文件复制到Amazon RedShift?
我试图将一些MySQL表迁移到AmazonRedshift,但遇到了一些问题 步骤很简单: 1.将MySQL表转储到csv文件 2.将csv文件上载到S3 3.将数据文件复制到红移 错误发生在步骤3中: SQL命令是: 从“s3://ciphor/TABLE_A.csv”凭据复制表_A 'aws\u访问\u密钥\u id=xxxx;aws_secret_access_key=xxxx'分隔符','csv 错误信息: 执行SQL命令时出错:从中复制表 “s3://ciphor/TABLE_A.csv”凭证 'aws\u访问\u密钥\u id=xxxx;aws\u secret\u access\u key=xxxx错误:复制CSV为 不支持[SQL State=0A000]执行时间:0.53s 1条语句 失败了 我不知道csv文件的格式是否有任何限制,比如分隔符和引号,我在文档中找不到它Mysql 如何将csv数据文件复制到Amazon RedShift?,mysql,csv,amazon-redshift,Mysql,Csv,Amazon Redshift,我试图将一些MySQL表迁移到AmazonRedshift,但遇到了一些问题 步骤很简单: 1.将MySQL表转储到csv文件 2.将csv文件上载到S3 3.将数据文件复制到红移 错误发生在步骤3中: SQL命令是: 从“s3://ciphor/TABLE_A.csv”凭据复制表_A 'aws\u访问\u密钥\u id=xxxx;aws_secret_access_key=xxxx'分隔符','csv 错误信息: 执行SQL命令时出错:从中复制表 “s3://ciphor/TABLE_A.cs
任何人都可以提供帮助?问题最终通过以下方法解决: 从“s3://ciphor/TABLE_A.csv”凭据复制表_A 'aws\u访问\u密钥\u id=xxxx;aws_secret_access_key=xxxx'分隔符',' 删除引用
更多信息可以在这里找到如果您想保存自己的一些代码/您有一个非常基本的用例,您可以使用Amazon数据管道。
它统计一个spot实例并在amazon网络中执行转换,这是一个非常直观的工具(但非常简单,因此您无法使用它执行复杂的操作)现在amazon Redshift支持复制命令的CSV选项。最好使用此选项正确导入CSV格式的数据。格式如下所示
COPY [table-name] FROM 's3://[bucket-name]/[file-path or prefix]'
CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxx' CSV;
默认分隔符是(,),默认引号是(“)。您也可以像这样使用CSV和分隔符选项导入TSV格式的数据
COPY [table-name] FROM 's3://[bucket-name]/[file-path or prefix]'
CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxx' CSV DELIMITER '\t';
使用旧方法(分隔符和REMOVEQUOTES)有一些缺点,REMOVEQUOTES不支持在封闭的字段中包含新行或分隔符。如果数据可以包含此类字符,则应使用CSV选项
有关详细信息,请参阅以下链接
你可以试试这个
从's3://ciphor/TABLE_A.csv'凭证'aws_access_key_id=xxxx;aws_secret_access_key=xxxx'csv
CSV本身表示逗号分隔的值,不需要提供分隔符。请参阅链接
[看起来您正试图将本地文件加载到红移表中。 CSV文件必须在S3上,复制命令才能工作 若您可以将数据从表中提取到CSV文件,那个么您还有一个脚本选项。您可以使用Python/boto/psycopg2组合将CSV加载脚本化到Amazon Redshift 在我的工作中,我做了以下几点:
loadConf=[ db_client_dbshell ,'-u', opt.mysql_user,'-p%s' % opt.mysql_pwd,'-D',opt.mysql_db_name, '-h', opt.mysql_db_server]
...
q="""
%s %s
INTO OUTFILE '%s'
FIELDS TERMINATED BY '%s'
ENCLOSED BY '%s'
LINES TERMINATED BY '\r\n';
""" % (in_qry, limit, out_file, opt.mysql_col_delim,opt.mysql_quote)
p1 = Popen(['echo', q], stdout=PIPE,stderr=PIPE,env=env)
p2 = Popen(loadConf, stdin=p1.stdout, stdout=PIPE,stderr=PIPE)
...
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(bucket_name)
k = Key(bucket)
k.key = s3_key_name
k.set_contents_from_file(file_handle, cb=progress, num_cb=20,
reduced_redundancy=use_rr )
sql="""
copy %s from '%s'
CREDENTIALS 'aws_access_key_id=%s;aws_secret_access_key=%s'
DELIMITER '%s'
FORMAT CSV %s
%s
%s
%s;""" % (opt.to_table, fn, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,opt.delim,quote,gzip, timeformat, ignoreheader)
既然决议已经提出,我就不重复显而易见的问题了 但是,如果您收到一些无法解决的错误,只需在连接到任何红移帐户时在工作台上执行即可:
select * from stl_load_errors [where ...];
stl_load_errors以历史方式包含Amazon的所有load errors,普通用户可以查看与其自己帐户对应的详细信息,但超级用户可以拥有所有访问权限
详细信息可在以下网址获取:
评论有点晚,但它可能很有用:- 您可以使用开源项目将表直接从mysql复制到redshift- 它只需要火花,如果你有纱线,那么它也可以使用 优点:-它将使用主键自动决定distkey和交错排序key。我始终使用以下代码:
COPY clinical_survey
FROM 's3://milad-test/clinical_survey.csv'
iam_role 'arn:aws:iam::123456789123:role/miladS3xxx'
CSV
IGNOREHEADER 1
;
说明:1-在S3中复制文件存储的名称
2-来自文件的地址
3-iam_角色是凭证的替代。请注意,iam_角色应在控制台的iam管理菜单中定义,然后在信任菜单中也应分配给用户(这是最难的部分!)
4-CSV使用逗号分隔符
5 -无知头1是必须的!否则它会抛出一个错误。(跳过我的CSV的一行并考虑它是一个头)你会想引用RealStHeaveDeaveDebug文档和章节。不幸的是,乍一看,你看起来很好。谢谢,这个问题在添加了“ReaveQuo报价”之后得到了解决。" option@ciphor请将此作为回答而不是评论。您可以查看stl_加载_错误表以查找有关模糊错误消息的更多具体信息。
“从stl_加载_错误中选择*”
据我所知,数据管道还不支持红移。我已经查看了数据管道,您是对的,对不起,我的错误。@ciphor使它看起来像红移一样(或者我遗漏了什么?)@PaulBellora:有趣的是…它使用数据管道调用shell脚本来将数据从S3同步到红移,因此,本质上,数据管道被用作任务调度程序。如果您面临未找到分隔符的问题。错误,这个答案是可行的解决方案。