如何从自定义 REST API 将数据加载到 Redshift

Posted

技术标签:

【中文标题】如何从自定义 REST API 将数据加载到 Redshift【英文标题】:How to load data into Redshift from a custom REST API 【发布时间】:2018-01-05 23:01:45 【问题描述】:

我是 AWS 新手,如果之前有人问过这个问题,请见谅。

我有一个 REST API,它返回 2 个参数(姓名、电子邮件)。我想将此数据加载到 Redshift 中。

我想制作一个每 2 分钟启动一次并调用 REST API 的 Lambda 函数。 API 可能会在这 2 分钟内返回最多 3-4 条记录。

那么,在这种情况下,是否可以只执行插入操作,或者我仍然必须使用 COPY(使用 S3)?我只担心性能和无错误(稳健)的数据插入。

另外,Lambda 函数将每 2 分钟异步启动一次,因此插入操作可能会重叠(但数据不会重叠)。

在这种情况下,如果我选择 S3 选项,我担心之前 Lambda 调用生成的 S3 文件会被覆盖并发生冲突。

长话短说,在 redshift 中插入较少记录的最佳做法是什么?

PS:我也可以使用其他 AWS 组件。我什至研究了 Firehose,它非常适合我,但它无法将数据加载到 Private Subnet Redshift。

提前谢谢大家

【问题讨论】:

看起来您没有太多数据.. 那么当您拥有大量数据时,为什么您需要 Redshift,这是一种昂贵且理想的解决方案 还有其他巨大的表格,我们使用 AWS DMS 处理这些表格 【参考方案1】:

是的,INSERT 少量数据就可以了。

始终通过COPY 命令加载的建议适用于大量数据,因为COPY 加载是跨多个节点并行进行的。但是,只需几行,您就可以使用INSERT 而不会感到内疚。

如果您的SORTKEY 是一个时间戳,并且您正在按时间顺序加载数据,那么执行VACUUM 的需要也较少,因为数据已经排序。但是,如果要删除行,最好还是定期VACUUM 表。

【讨论】:

【参考方案2】:

因为您没有太多数据;您可以使用复制或插入。复制命令针对批量插入进行了更优化..它就像给你批量插入的能力..

两者都可以正常工作

【讨论】:

【参考方案3】:

仅供参考,AWS 现在支持数据 API 功能。

如官方文档中所述,您可以使用 HTTP 请求轻松访问 Redshift 数据,无需 JDBC 连接。

数据 API 不需要到集群的持久连接。相反,它提供了一个安全的 HTTP 端点并与 AWS 开发工具包集成。您可以使用端点运行 SQL 语句而无需管理连接。对数据 API 的调用是异步的。

https://docs.aws.amazon.com/redshift/latest/mgmt/data-api.html

以下是使用 Redshift Data API 所需的步骤

    确定您作为数据 API 的调用者是否获得授权。有关授权的更多信息,请参阅授权访问 Amazon Redshift 数据 API。

    确定您是打算使用来自 Secrets Manager 的身份验证凭证还是临时凭证来调用数据 API。有关更多信息,请参阅在调用 Amazon Redshift 数据 API 时选择身份验证凭证。

    如果您将 Secrets Manager 用于身份验证凭据,请设置密钥。有关更多信息,请参阅在 AWS Secrets Manager 中存储数据库凭证。

    查看调用数据 API 时的注意事项和限制。有关更多信息,请参阅调用 Amazon Redshift 数据 API 时的注意事项。

    从 AWS 命令​​行界面 (AWS CLI)、您自己的代码或使用 Amazon Redshift 控制台中的查询编辑器调用数据 API。有关从 AWS CLI 调用的示例,请参阅使用 AWS CLI 调用数据 API。

【讨论】:

以上是关于如何从自定义 REST API 将数据加载到 Redshift的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress Rest API:返回 100 多个结果

如何使用 Swift 3 将图像从 Rest Api 加载到视图中加载方法

从自定义单元格重新加载表格视图数据

Prometheus 无法从自定义 Rest Endpoint 读取指标

如何使延迟加载 Apache Spark Dataframe 连接到 REST API

如何从自定义 UITableViewCell 调用操作以重新加载 tableView