0

*免责声明:*这是我第一次在 stackoverflow 上发帖,如果这里不适合提出如此高级别的问题,请原谅。

我刚开始担任数据科学家,有人要求我为“外部”数据设置 AWS 环境。这些数据来自不同的来源,采用不同的格式(尽管主要是 csv/xlsx)。他们希望将其存储在 AWS 上,并能够使用 Tableau 对其进行查询/可视化。

尽管我缺乏 AWS 经验,但我还是设法提出了一个或多或少可行的解决方案。这是我的方法:

  1. 使用 Lambda 抓取原始 csv/xlsx
  2. 使用与 1 相同的 Lambda 中的 pandas/numpy 对数据进行清理和转换。
  3. 处理后的数据以 CSV 格式写入 S3 文件夹(仍在同一个 lambda 中)
  4. Athena 用于索引数据
  5. 使用 Athena 创建额外的表(其中一些是视图,其他不是)
  6. 为 Tableau 设置 Athena 连接器

它可以工作,但感觉像是一个混乱的解决方案:查询很慢而且 lambdas 很大。数据通常没有尽可能地标准化,因为它会更多地增加查询时间。存储为 CSV 似乎也很愚蠢

我试图阅读最佳实践,但这有点不知所措。我有很多问题,但归结为:在这种情况下我应该使用哪些服务?高层架构是什么样的?

4

1 回答 1

1

我有一个非常相似的用例;然而,这一切都取决于项目的规模以及您希望如何采取稳健性/未来规划解决方案。

作为第一次迭代,您上面描述的内容似乎可行并且是一种合理的方法,但正如您所指出的那样,它非常基本且笨拙。如果外部数据是您将持续摄取并且可以预见增长的东西,我强烈建议您首先设计一个数据湖系统,我的建议是使用 AWS Lake Formation 服务,或者如果您想要更多控制,并建立基础,使用一些东西就像3x3x3方法一样。

通过设计您的数据湖,将来正确管理数据会变得更加简单,并且可以很好地分区您的文件以供将来使用/数据潜水。

作为一个高级架构将是这样的:

  1. Lambda 从源获取请求并粘贴到 s3
  2. Datalake 系统处理文件和自动分区 + 标签

然后,

  1. 取决于您需要以多快的速度可视化数据以及大量数据是否可能使用AWS 胶水 pyshell或 pyspark 而不是 lambda。它将更清洁地处理您的 pandas/numpy。

如果您使用 Athena 或同等产品以提高查询速度,我还建议您将文件转换为镶木地板。记住文件分区对性能很重要!

请注意,以上内容适用于非常强大的摄取系统,如果您有一个不经常摄取数据的基本用例,则可能会有些过大。

如果您的数据是小数据包但非常频繁,您甚至可以在 lambda 到 s3 步骤之前使用运动层,以更有条理的方式管理您的数据。如果您想要一个更现代的仓库解决方案,您也可以使用 redshift 来托管您的文件而不是 S3。但是,如果您有 x 个来源,为了简单起见,我建议您坚持使用 s3。

于 2020-04-16T15:24:47.200 回答