如何使用从 s3 到 redshift db 的复制命令解决语法错误

Posted

技术标签:

【中文标题】如何使用从 s3 到 redshift db 的复制命令解决语法错误【英文标题】:how to resolve syntax error using copy command from s3 to redshift db 【发布时间】:2019-09-06 19:14:26 【问题描述】:

从 s3 复制命令到 redshift 的语法错误

我可以连接到 redshift 数据库,但在复制命令的表名处出现语法错误。我在 s3 中使用 csv 文件到 redshift 中的 schema.tblname

COPY ###_schema.tblName_csv
FROM 's3://####/###/Filename.csv'
CREDENTIALS 'aws_iam_role=arn:aws:iam::######'
DATEFORMAT 'auto'
IGNOREHEADER 1
DELIMITER ','
IGNOREBLANKLINES;

我希望能够在加载数据后从此 tbl 中选择 *

【问题讨论】:

错误到底是什么意思? 它显示代码 8001,用户无权承担 IAM 角色。我已将提供给我的 IAM 和我自己的 IAM 凭证交给它 我怀疑该角色与您的 Redshift 集群没有关联 - 请查看此处了解如何关联它docs.aws.amazon.com/redshift/latest/mgmt/… 和我自己的凭据是什么意思?您应该提供角色或凭据。 从上面提供给我的复制命令中的凭证行 arn:aws:iam::randomKey>:user/james.cole@.com 'aws_iam_role=arn:aws:iam:: -redshift-role'(提供)我有一个 IAM 角色,但在复制命令中他提供了其他可能是问题的东西。一开始我将 boto3.client 设置为等于“Redshift”以建立我验证为真的连接,复制时我是否需要另一个指向 s3 的“Boto3.client”? 【参考方案1】:

Redshift COPY 命令将需要某种方式来获取 s3 权限。你可以

提供使用 IAM 角色(角色has to associated with your cluster),

copy customer from 's3://mybucket/mydata'  
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

提供 AWS 访问密钥和密钥

copy table-name
from 's3://objectpath'
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>';

提供来自 sts 服务的临时凭证

copy table-name
from 's3://objectpath'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>
token '<temporary-token>';

Redshift Manual reference

【讨论】:

以上是关于如何使用从 s3 到 redshift db 的复制命令解决语法错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用无服务器架构将数据从 S3 加载到 Redshift?

如何从 SQL 脚本执行 AWS S3 到 Redshift Copy 命令?

谷歌云平台到 S3/Redshift

使用引号将数据从 S3 加载到 Amazon Redshift

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容

用于将数据从AWS S3加载到Redshift的Python脚本