使用 AWS Quicksight / Athena 分析二进制 NetCDF 文件

Analyze binary NetCDF files with AWS Quicksight / Athena

我的任务是在 Quicksight 中分析天气预报数据。预测数据保存在 public S3 存储桶中的 NetCDF 二进制文件中。问题是:如何将这些二进制文件的内容公开给 Quicksight 甚至 Athena?

有 python 个库可以解码二进制文件中的数据,例如 Iris。它们是这样使用的:

import iris
filename = iris.sample_data_path('forecast_20200304.nc')
cubes = iris.load(filename)
print(cubes)

那么创建数据摄取管道所需的 AWS 工作流程和服务是什么:

  1. 响应新二进制文件可用的 SQS 消息
  2. 访问新的二进制文件并将其解码以访问预测数据
  3. 将解码数据添加到先前 SQS 通知的已解码数据集中
  4. 使所有解码数据在 Athena/Quicksight 中可用

棘手的,这个...

我的做法大概是这样的:

在 Python 中编写一个 Lambda 函数,当新文件出现在 S3 存储桶中时触发 - 通过 S3 通知(如果您控制存储桶)、SNS、SQS 或 EventBridge 中的计划。该函数使用您问题中包含的代码片段来转换每个新文件并将转换后的数据上传到另一个 S3 存储桶。

我不知道这些文件的大小以及它们的发布频率,所以是否转换为 CSV、JSON 或 Parquet 是您必须决定的——如果数据是小的 CSV可能是最简单的并且足够好。

在新的 S3 存储桶中使用转换后的数据,您需要做的就是为数据集创建 Athena table 并开始使用 QuickSight。

如果你最终得到很多小文件,你可能想要执行第二步,每天一次将转换后的文件合并成更大的文件,可能还有 Parquet,但不要那样做,除非你不得不。


另一种方法是使用 Athena Federated Query:通过实施响应来自 Athena 的特定调用的 Lambda 函数,您可以让 Athena 读取您想要的任何数据源。它目前处于预览阶段,据我所知,所有示例代码都是用 Java 编写的——但理论上可以在 Python.

中编写 Lambda 函数

我不确定它是否比实施您建议的 ETL 工作流工作量少,但您的工作流是 Athena Federated Query 设计的用例之一,可能值得研究.如果 NetCDF 文件很常见,并且此类文件的数据源对其他人有用,我相信 Athena 团队很乐意与您交谈并为您提供帮助。