У меня есть задача анализировать данные прогноза погоды в Quicksight. Данные прогноза хранятся в двоичных файлах NetCDF в публичной корзине S3. Возникает вопрос: как предоставить содержимое этих двоичных файлов Quicksight или даже Athena?

Существуют библиотеки Python, которые декодируют данные из двоичных файлов, например Ирис. Используются они так:

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

Хитрый, это ...

0
Aardvark 21 Сен 2020 в 17:04

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 будет рада поговорить с вами и помочь вам.

1
Theo 22 Сен 2020 в 13:52