通过 REST API 公开 Redshift 表

Posted

技术标签:

【中文标题】通过 REST API 公开 Redshift 表【英文标题】:Expose Redshift tables through REST API 【发布时间】:2020-06-15 16:06:52 【问题描述】:

我目前正在考虑如何通过 REST API 以有意义且一致的方式公开 Redshift 表中存在的数据。

我希望它的工作方式是调用者调用 API,然后我们对表进行某种动态查询。我担心延迟,因为查询的范围从简单到非常复杂。由于 Redshift 需要作为客户端连接到数据库,我们可以采用的一些方法是:

创建连接 Redshift 的 lambda 函数,通过 API 网关调用 使用 OData 创建 RESTful API。但是,我认为 Redshift 不支持开箱即用的 OData。

我倾向于使用 OData,因为它具有高级过滤选项以及分页功能。

我正在寻求建议,OData 是否足够,如果可以,如何将 OData 与 redshift 集成。 也欢迎任何其他建议/方法。

谢谢!

【问题讨论】:

【参考方案1】:

让我来看看不同的选项:

红移数据接口

Redshift data API 让您调用查询并以异步方式获取结果。

您可以直接从前端使用 API,也可以将其放在 API Gateway 后面。

拉姆达

如果您信任您的用户并且可以获得适当的身份验证,您可以直接从前端调用 Lambda 并传递一些 SQL 以根据参数运行或生成 SQL。您可以使用联合查询将其与 Athena 交换。您可以选择在 API Gateway 中添加一些附加功能,例如速率限制和不同形式的身份验证。请记住,Lambda 和 API Gateway 在返回的数据和执行时间方面都有限制。

对于长时间运行的查询,我建议 Lambda、API 网关甚至从前端本身调用 AWS Glue Python Shell 作业,该作业将使用卸载查询将结果删除到 S3 中。前端可以在工作完成时进行池化。

如果您的查询类型很少,那么您可以制作适当的休息 API。

除了 Lambda,您还可以使用 Amazon Athena Federated Query,实际上您可以直接从前端进行查询。

OData 实现

Redshift 有第三方 OData 实现。只是谷歌它。使用使用 OData 的前端库(我过去使用 KendoUI),您可以在几天内制作一个功能丰富的前端。此选项的主要问题是工具成本可能超出您的预算。当然,你花在制作东西上的时间也是一种成本,但这真的取决于你的实际需求。

那么如何选择呢?

根据您的要求,我建议您简单地浏览选项并根据成本、实施时间、性能、可靠性和安全性进行选择。

Redshift 性能如何?

这是关于 Redshift 和按需查询最困难的部分。在 Redshift 上,您没有索引,可以压缩数据并且数据以列方式存储。所有这些都会使 Redshift 比普通关系数据库的随机查询慢。

但是,您可以确保您的表使用与您的查询匹配的分布样式进行排序,并且您的查询使用列式存储来发挥其优势(并非所有列都被请求),那么它可以更快。

要记住的另一件事是 Redshift 不能很好地处理并发,我相信默认情况下只能有 8 个并发查询,你可以增加它,但你绝对不会超过 20 个。

如果您的用户可以等待他们的查询(我已经看到错误查询超过 2 小时。我相信您可以让它们花费更长的时间,那么 Redshift 就可以了,如果不能,那么您可以尝试将 Postgres 放在前面Redshift 通过使用外部表,然后使用它前面的平均索引来加快速度。

【讨论】:

以上是关于通过 REST API 公开 Redshift 表的主要内容,如果未能解决你的问题,请参考以下文章

读取 kafka 主题并通过 Rest API 公开数据以供 prometheus 抓取(Nodejs)

向 Web 公开 Cassandra REST API 的最佳方式是啥?

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

如何保护 AWS Gateway REST API 可通过可公开访问的网页进行访问 (React)

REST/JSON:如何生成示例请求?如何公开 API?

通过 APIM 使用 Azure 功能的 REST URL