我尝试让Kinesis Firehose在Redshift表中推送数据。
firehose流正在工作并将数据放入S3。
但Redshift中的目标表中没有任何内容。
我该如何解决这个问题?
答案 0 :(得分:35)
最后,我通过删除并重新创建Firehose流来使其工作: - / 可能通过Web控制台重复编辑使得事情不稳定。
但这是故障排除指南:
此时,您应该能够在Redshift日志中看到连接尝试:
@list
检查Firehose使用的Redshift用户是否对目标表具有足够的权限:
select * from stl_connection_log where remotehost like '52%' order by recordtime desc;
然后您可以检查COPY命令是否已运行:
select tablename,
HAS_TABLE_PRIVILEGE(tablename, 'select') as select,
HAS_TABLE_PRIVILEGE(tablename, 'insert') as insert,
HAS_TABLE_PRIVILEGE(tablename, 'update') as update,
HAS_TABLE_PRIVILEGE(tablename, 'delete') as delete,
HAS_TABLE_PRIVILEGE(tablename, 'references') as references
from pg_tables where schemaname='public' order by tablename;
然后检查加载错误或服务器错误:
select * from stl_query order by endtime desc limit 10;
如果数据或COPY选项中存在格式问题,或者数据与目标列不匹配,则至少应该看到COPY尝试和一些加载错误。
如果您仍然卡住,这些日志表中没有任何内容,请尝试删除并重新创建整个firehose流,因为可能存在与Web控制台相关的一些错误。 (这一步对我有用)
答案 1 :(得分:6)
转到在Kinesis Firehose设置期间自动创建的IAM角色(firehose_delivery_role
),并确保附加以下角色:
AmazonS3FullAccess
AmazonRedshiftFullAccess
AmazonKinesisFullAccess
AmazonKinesisFirehoseFullAccess
有一个错误在IAM中省略了S3凭据,导致Kinesis设置无法正常工作。
同时验证您实际上是否看到在S3中累积的数据文件。
答案 2 :(得分:1)
在Kinesis Firehos设置期间,使用Redshift masteruser
凭据。任何其他用户都无法使用。