我试图迁移一些MySQL表到亚马逊红移,但遇到了一些问题。
步骤很简单:1.将MySQL表转储到csv文件2.将csv文件上载到S3 3.将数据文件复制到RedShift
步骤3出错:
SQL命令为:
从“s3://密码/表格A.csv”凭证“中复制表格A,aws_access_key_id=xxxx;aws_secret_access_key=xxxx'分隔符',' csv;
错误信息:
执行SQL命令时出错:从“s3://密码/表格A.csv”凭证“中复制表格A,aws_access_key_id=xxxx;aws密码访问密钥=xxxx错误:不支持复制CSV [SQL状态= 0A 000]执行时间:0.53s 1条语句失败。
我不知道csv文件的格式是否有限制,比如分隔符和引号,我在文档中找不到。
有人能帮忙吗?
8条答案
按热度按时间mznpcxlj1#
该问题最终通过使用以下方法解决:
从“s3://密码/表格A.csv”凭证“中复制表格A,aws_access_key_id=xxxx;aws_secret_access_key=xxxx'分隔符','删除引号;
更多信息请访问http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html
lmyy7pcs2#
现在亚马逊Redshift支持CSV选项的COPY命令。这是更好地使用这个选项导入CSV格式的数据正确。格式如下所示。
默认分隔符是(,),默认引号是(“)。您也可以使用CSV和DELIMITER选项导入TSV格式的数据,如下所示。
使用REMOVEQUOTES不支持的旧方法(DELIMITER和REMOVEQUOTES)有一些缺点,在封闭的字段中有一个新行或分隔符。如果数据可以包括这种字符,您应该使用CSV选项。
有关详细信息,请参见以下链接。
http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html
7rtdyuoh3#
如果你想保存一些代码/你有一个非常基本的用例,你可以使用亚马逊数据管道。它统计一个现货示例,并在亚马逊网络内执行转换,它是一个非常直观的工具(但非常简单,所以你不能用它做复杂的事情)
zd287kbt4#
你可以试试这个
从“s3://密码/表格A.csv”凭证“中复制表格A,aws_access_key_id=xxxx;aws秘密访问密钥=xxxx' csv;
CSV本身意味着逗号分隔的值,不需要提供分隔符与此。请参阅链接。
[http://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html复制格式]
jdg4fx2g5#
我总是这个代码:
说明:
1-复制S3中文件存储的名称
2-文件的发件人地址
3-iam_role是CREDENTIAL的替代。请注意,iam_role应该在控制台的iam管理菜单中定义,然后在信任菜单中也应该分配给用户(这是最难的部分!)
4-CSV使用逗号分隔符
5-IGNORHEADER 1是必须的!否则它会抛出一个错误。(跳过我的CSV的一行,把它当作一个头)
63lcw9qa6#
既然已经提供了解决方案,我就不重复显而易见的内容了。
然而,如果您收到一些无法解决的错误,只需在连接到任何Redshift帐户时在工作台上执行即可:
stl_load_errors以历史方式包含所有Amazon RS加载错误,其中普通用户可以查看与其自己帐户对应的详细信息,但超级用户可以拥有所有访问权限。
详细信息见:Amazon STL Load Errors Documentation
50few1ms7#
评论有点晚,但它可能是有用的:-
您可以使用一个开源项目将表直接从MySQL复制到redshift -sqlshift。
它只需要Spark,如果你有Yarn,那么它也可以使用。
优点:-它将自动决定distkey和交错sortkey使用主键。
ttisahbt8#
看起来您正在尝试将本地文件加载到REDSHIFT表中。CSV文件必须位于S3上,COPY命令才能工作。
如果你可以将数据从表中提取到CSV文件,你还有一个脚本选项。你可以使用Python/boto/psycopg 2组合来将你的CSV加载脚本化到Amazon Redshift。
在我的MySQL_To_Redshift_Loader中,我执行以下操作:
1.从MySQL提取数据到临时文件。
1.使用boto Python模块和多部分上传将数据压缩并加载到S3。
1.使用psycopg 2 COPY命令将数据附加到红移表。