无法从S3 Bucket加载数据至Redshift数据库求助
问题排查与解决方案
1. 优先处理日期格式不匹配问题
从你提到stl_load_errors显示日期相关错误,这是COPY失败的常见原因:
- 执行以下SQL查看具体错误详情:
SELECT err_reason, line_number, colname FROM stl_load_errors WHERE tablename = 'dimdate' ORDER BY starttime DESC LIMIT 10;err_reason会明确指出哪一行的哪个日期字段格式不符合Redshift要求。 - Redshift默认日期格式为
YYYY-MM-DD,如果你的CSV中日期是其他格式(如MM/DD/YYYY、DD-MM-YYYY),需在COPY命令中添加DATEFORMAT参数:cursor.execute(""" copy dimDate from 's3://BUCKETURI/output/dimDate.csv' credentials 'aws_iam_role=arn:aws:iam::ACCOUNTID:role/role-s3-to-redshift-and-vice-versa' delimiter ',' region 'us-east-1' IGNOREHEADER 1 DATEFORMAT 'MM/DD/YYYY'; -- 替换为你的实际日期格式 """) - 若存在多种日期格式,可尝试用
DATEFORMAT 'auto'让Redshift自动识别。
2. 验证IAM角色权限配置
如果日期问题排除后仍报错,再确认凭证相关配置:
- 检查IAM角色信任关系:确保角色允许Redshift服务扮演它,信任策略需包含:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - 检查IAM角色权限策略:必须拥有目标S3桶的读取权限,策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::BUCKETURI", "arn:aws:s3:::BUCKETURI/*" ] } ] } - 关联IAM角色到Redshift集群:在Redshift控制台的集群配置中,确认该IAM角色已添加到集群的「附加IAM角色」列表。
- 若使用AK/SK凭证,确保密钥拥有S3读取权限,且COPY命令格式正确:
credentials 'aws_access_key_id=你的AK;aws_secret_access_key=你的SK'
3. 其他可能的问题
- 检查CSV文件格式:是否存在多余分隔符、未转义的逗号(若有,建议改用
CSV参数替代delimiter ',',并确保字段用双引号包裹)。 - 核对表结构:
dimDate表的字段数量、类型需与CSV列完全匹配,比如日期字段需定义为DATE类型,而非VARCHAR。
内容的提问来源于stack exchange,提问作者ANDRE_21
相关产品推荐
相关产品推荐

