如何configurationAWS Kinesis Firehose以便能够复制到Redshift?

问题

我已经build立了一个Firehose,并select了一些看起来会导致stream式数据以Redshift结尾的选项。 我在Redshift有一个Firehose和一个目标表。 数据在中间S3存储桶中正确显示,但未进行Redshift。

我已经允许Firehose地区的CIDR通过Redshift安全组访问集群[1]。 我给了Firehose Redshift集群的凭据,并且已经testing了证书。 该群集可公开访问。

STL_LOAD_ERRORS表是空的,这是我期望看到的任何复制语句尝试和失败产生的错误。 CloudWatch中也没有DeliveryToRedshift事件。 这使我相信,甚至没有尝试使它红移。

我正在使用Redshift COPY选项来指定副本的jsonpath文件。 我目前有: json "s3://app-event-data/_jsonpaths/_bigtable.jsonpath.json" 。 该文件存在于该位置的s3中,看起来像jsonpath文件[3]。 我也尝试添加凭据到该框,但我不这是必要的。

更新1

我启用了Redshift的日志loggingfunction,告诉我Firehose有成功的身份validation。 然后,我创build了一个新的参数组,并启用了用户活动日志logging并重新启动了群集。 现在正在等待下一个日志批处理。

参考

  1. http://docs.aws.amazon.com/firehose/latest/dev/firehose-dg.pdf
  2. https://aws.amazon.com/kinesis/firehose/
  3. http://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-json.html

为什么selectServerFault? 提问Amazon AWS的最佳StackExchange站点

我会标记这个问题:amazon-kinesis amazon-firehose amazon-redshift

以下是我最初configuration错误的所有内容,并最终调整为让Firehose正确地将数据复制到Redshift中:

  1. 确保您select的存储桶与Redshift群集处于相同的区域。 如果您因某种原因想要承担额外费用,则可以指定REGION 。 您创build后无法更改存储区的区域 。

桶区域选择

起初这有点令人困惑,因为桶控制台中的区域select器显示“全局”。

在这里输入图像说明

  1. Firehose不会为您引用标识符,因此如果您在表单中提供的表名需要引号,则需要自行添加它们。 列名同样适用。

表名称说明

  1. 单引号只在复制选项。

  2. 通过从Redshift安全选项卡授权正确的CIDR / IP,授予Fireshose访问您的Redshift群集的权限。 您可以在这里find您创buildFirehose的区域的正确CIDR / IP。 您不需要创build新的群集安全组来执行此操作。 您可以将其添加到默认的一个。 如果您添加一个新的安全组,那么您需要从仪表板重新configuration您的集群以使用新的安全组,它不能有2个。

  3. Redshift COPY不接受UTC以外时区的时间戳。 如果您使用RFC3339等格式,则需要首先将UTC时间放在UTC中,并在复制选项中指定TIMEFORMAT 'auto'

  4. 为了知道事情不能正常工作时发生了什么,您需要通过以下方式启用Redshift中的用户活动日志logging

    • (显然)启用日志logging

在这里输入图像说明

  • 创build一个新的参数组

在这里输入图像说明

  • user_activity_logging设置为true

在这里输入图像说明

  • 修改您的群集使用新的参数组

在这里输入图像说明

在这里输入图像说明

  • 抢劫你的集群

在这里输入图像说明

Enable user activity logging解锁