首页 > 解决方案 > 使用 AWS Quicksight / Athena 分析二进制 NetCDF 文件

问题描述

我的任务是在 Quicksight 中分析天气预报数据。预测数据保存在公共 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 中提供所有解码数据

棘手的,这...

标签: amazon-athenanetcdfamazon-quicksight

解决方案


我会做的可能是这样的:

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

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

在新的 S3 存储桶中使用转换后的数据,您只需为数据集创建一个 Athena 表并开始使用 QuickSight。

如果您最终得到很多小文件,您可能希望实施第二步,每天一次将转换后的文件合并成更大的文件,可能还有 Parquet,但除非您必须这样做,否则不要这样做。


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

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


推荐阅读