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

如何解决使用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中的所有解码数据可用

棘手的人,这个...

解决方法

我可能要做的就是这样:

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

我不知道这些文件的大小以及它们的发布频率,因此您必须决定是否转换为CSV,JSON或Parquet –如果数据较小,CSV可能会最容易并且会足够好。

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

如果最终遇到很多小文件,则可能需要执行第二步,每天将转换后的文件合并为更大的文件,甚至可以合并为Parquet,但不要那样做,除非必须


另一种替代方法是使用Athena Federated Query:通过实现可响应Athena特定调用的Lambda函数,可以使Athena读取所需的任何数据源。目前处于预览阶段,据我所知所有示例代码都是用Java编写的-但从理论上讲,可以使用Python编写Lambda函数。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?