【问题标题】:AWS kinesis to Aws redshift lambda function without using S3不使用 S3 的 AWS kinesis 到 Aws redshift lambda 函数
【发布时间】:2021-09-05 05:05:53
【问题描述】:

我正在尝试编写一个 lambda 函数来将流数据从 AWS kinesis 或 kinesis firehose 直接加载到 Aws redshift,而无需使用中间 S3 存储桶。让我知道是否有人可以对此提供支持?

【问题讨论】:

  • 您是否已经尝试过做某事?到目前为止,您尝试了哪些配置和代码?另外,请详细说明您选择上述设置的原因/您有什么限制。
  • 尝试更具体地回答您的问题
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: amazon-s3 aws-lambda amazon-redshift amazon-kinesis


【解决方案1】:

将数据加载到 Redshift 的高带宽方法是使用 COPY 命令。此命令支持将数据直接并行加载到 Redshift 计算节点中,这在涉及大量数据时是一项巨大的资产。 COPY 命令支持 4 种不同的源 - S3、DynamoDB、EMR 和 SSH 主机。 (在所有 4 种情况下,如果数据很大,则启用并行加载很重要)

因此,要使用 COPY 命令但不使用 S3,您需要配置一些额外的资源,并且不清楚如何将数据移动到 Lambda 中的任何这些资源(尽管它绝对可行)。由于我不理解对 S3 的反对意见,因此我无法谈论这些路径之一是否能满足您的需求。但是,如果您需要创建另一组计算基础架构来绕过 S3,您似乎不会获得有效的解决方案。

(不推荐此路径)您可以通过 SQL 将数据加载到表中 - 只需将值烘焙到 SQL 中并运行它。即使以这种方式加载中等大小的数据也是非常低效的,并且可能会给您带来问题。你被警告了! “插入值(...);”有效并将运行。问题是您的数据正在通过您的 Redshift 领导节点和查询编译器运行。咳!您还将受到 64K 字符的查询大小限制的限制,并且数据将以纯文本形式写出,因此每个 INSERT 只能保存非常有限的数据量。啊!每个 INSERT 将分配一个新块,增加所需的 VACUUM 工作量。现在就射我吧!如果您使用 Kinesis,您的数据可能会很大,所以这也不太可能是您想要的路径。

S3 是最常用的将数据移动到 Redshift 的路径是有原因的。您最好问一下“我们担心 X 与 S3 相关,有没有办法在将数据加载到 Redshift 时解决这个问题?”。

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2023-01-01
    • 1970-01-01
    • 2018-07-02
    • 2017-08-10
    相关资源
    最近更新 更多