У меня есть задача анализировать данные прогноза погоды в Quicksight. Данные прогноза хранятся в двоичных файлах NetCDF в публичной корзине S3. Возникает вопрос: как предоставить содержимое этих двоичных файлов Quicksight или даже Athena?
Существуют библиотеки Python, которые декодируют данные из двоичных файлов, например Ирис. Используются они так:
import iris
filename = iris.sample_data_path('forecast_20200304.nc')
cubes = iris.load(filename)
print(cubes)
Итак, каков будет рабочий процесс и сервисы AWS, необходимые для создания конвейера приема данных, который:
- Ответить на сообщение SQS о том, что доступен новый двоичный файл
- Получите доступ к новому двоичному файлу и расшифруйте его, чтобы получить доступ к данным прогноза.
- Добавьте декодированные данные к набору уже декодированных данных из предыдущих уведомлений SQS.
- Сделайте все декодированные данные доступными в Athena / Quicksight
Хитрый, это ...
1 ответ
Я бы сделал что-то вроде этого:
Напишите в Python лямбда-функцию, которая запускается при появлении новых файлов в сегменте S3 - либо по уведомлениям S3 (если вы управляете сегментом), либо по SNS, SQS, либо по расписанию в EventBridge. Функция использует фрагмент кода, включенный в ваш вопрос, для преобразования каждого нового файла и загрузки преобразованных данных в другую корзину S3.
Я не знаю размера этих файлов и того, как часто они публикуются, поэтому вам нужно решить, конвертировать ли их в CSV, JSON или Parquet - если данные небольшие, CSV, вероятно, будет проще всего и будет достаточно хорошим. .
С преобразованными данными в новую корзину S3 все, что вам нужно сделать, это создать таблицу Athena для набора данных и начать использовать QuickSight.
Если у вас получится много маленьких файлов, вы можете реализовать второй шаг, на котором вы раз в день объединяете преобразованные файлы в файлы большего размера и, возможно, в Parquet, но не делайте ничего подобного, если вам не нужно.
Альтернативный способ - использовать Athena Федеративный запрос: реализовав лямбда-функции, которые отвечают на определенные вызовы от Athena, вы можете заставить Athena читать любой источник данных, который вы хотите. В настоящее время он находится в предварительной версии, и, насколько мне известно, весь пример кода написан на Java, но теоретически можно было бы написать лямбда-функции на Python.
Я не уверен, будет ли это меньше работы, чем реализация рабочего процесса ETL, подобного тому, который вы предлагаете, но ваш - один из вариантов использования, для которого был разработан Athena Federated Query, и на него, возможно, стоит обратить внимание. Если файлы NetCDF распространены и источник данных для таких файлов был бы полезен другим людям, я уверен, что команда Athena будет рада поговорить с вами и помочь вам.
Похожие вопросы
Новые вопросы
amazon-athena
Amazon Athena - это сервис для выполнения SQL-запросов к данным, хранящимся в Amazon S3. Amazon Athena является частью Amazon Web Services (AWS).