Перемещайте данные из PostgreSQL в AWS S3 и анализируйте с помощью RedShift Spectrum

У меня есть большое количество таблиц PostgreSQL с различными схемами и огромное количество данных внутри них.

Я не могу провести анализ данных прямо сейчас, потому что объем данных довольно большой - несколько ТБ данных и PostgreSQL не в состоянии обрабатывать запросы в разумные сроки.

Я думаю о следующем подходе - я обработаю все свои таблицы PostgreSQL с помощью Apache Spark, загрузлю DataFrames и сохраню их в виде файлов Parquet в AWS S3. Затем я буду использовать RedShift Spectrum для запроса информации, хранящейся в этих файлах PARQUET.

Прежде всего, я хотел бы спросить - будет ли это решение работать вообще?

И второе - сможет ли RedShift Spectrum автоматически создавать EXTERNAL-таблицы из этих файлов Parquet без дополнительной спецификации схемы (даже если исходные таблицы PostgreSQL содержат неподдерживаемые типы данных AWS RedShift)?

2 ответа

Решение
  1. Redshift Spectrum в значительной степени поддерживает те же типы данных, что и сам Redshift.

  2. Redshift Spectrum создает кластер вычислительных узлов за сценой. Размер кластера зависит от количества реальных узлов Redshift Cluster, поэтому, если вы планируете создать кластер Redshift с 1 узлом, Spectrum будет работать довольно медленно.

  3. Как вы отметили в комментариях, вы можете использовать Athena для запроса данных, и это будет лучшим вариантом в вашем случае вместо Spectrum. Но у Athena есть несколько ограничений, таких как время выполнения 30 минут, потребление памяти и т. Д. Поэтому, если вы планируете выполнять сложные запросы с несколькими объединениями, это может просто не сработать.

  4. Redshift Spectrum не может создавать внешние таблицы без предоставленной структуры.

  5. Лучшим решением в вашем случае будет использование Spark (на EMR или Glue) для преобразования данных, Athena - для запроса, а если Athena не может выполнить конкретный запрос - используйте SparkSQL для тех же данных. Вы можете использовать клей, но выполнение заданий в EMR на точечных инстансах будет более гибким и более дешевым. Кластеры EMR поставляются с EMRFS, что дает вам возможность использовать S3 почти прозрачно вместо HDFS.

AWS Glue может быть интересным вариантом для вас. Это как размещенная версия Spark, с некоторыми специфическими дополнениями AWS, так и Data Crawler + Data Catalog.

Он может сканировать неструктурированные данные, такие как файлы Parquet, и определять структуру. Что затем позволяет вам экспортировать его в AWS RedShift в структурированной форме, если это необходимо.

См. Этот пост в блоге о том, как подключить его к базе данных postgres с помощью JDBC для перемещения данных из Postgres в S3.