Используйте S3 в качестве базы данных, читая и записывая в SQL - PullRequest
0 голосов
/ 21 января 2019

Мы используем S3 для всех наших данных. Большинство из них структурированы и хранятся в виде паркетных файлов в многораздельных папках. До сих пор мы в основном использовали EMR и прямые пути S3 для доступа и обработки данных.

Я хочу внедрить некоторую структуру во всю архитектуру, оставив все без сервера, поэтому я подумал об использовании AWS Glue Data Catalog в качестве центрального хранилища метаданных, чтобы выполнять роль абстрактного слоя над данными на S3 для упрощения запросов. Я также хотел бы, чтобы Афина была очень хорошим и простым инструментом, чтобы использовать это специально для наших аналитиков.

Однако нам также необходимо обработать данные и снова вывести результаты в S3. Это означает, с одной стороны, преобразования ETL, а с другой стороны, агрегации, например, собирать статистику, выполнять некоторые подсчеты на разных уровнях и т. д. и хранить их в таблицах.

Поскольку специальные запросы с Athena выполняют работу очень хорошо, и она автоматически масштабируется, но проблема в том, что мы не можем использовать ее для автоматизированных заданий и вставлять результаты в другую таблицу S3 Glue. Хотя у Athena есть простая опция для сохранения результатов в S3, это сводит на нет всю цель наличия абстрактного слоя SQL поверх данных, когда речь идет о сохранении результатов, как это было бы с SQL в обычной базе данных.

С другой стороны, AWS Glue предоставляет возможности ETL, но в Spark и python требуется код, а не просто SQL.

Итак, мой вопрос: есть ли в AWS продукт или подход, который позволил бы запрашивать и вставлять данные, используя S3 в качестве хранилища и, возможно, только SQL для операций? Имея в виду также сервер, такой как Афина, но также для вывода или вставки в другие таблицы (также существующие таблицы).

В качестве бонуса я также хотел бы создать представления поверх таблиц, чтобы обеспечить еще один уровень безопасности и логики в модели, и в идеале работать с этими представлениями вместо / в дополнение к таблицам. Любая рекомендация для этого тоже очень ценится.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

В glue вы можете использовать pysql для написания команд sql.

df.createOrReplaceTempView ('имя_таблицы')

df1 = spark.sql (запрос)

0 голосов
/ 22 января 2019

Какого рода преобразование ETL вы хотите выполнить для своих входных данных и снова записать их на S3? Это просто простая агрегация? Могут ли все те преобразования, которые вы хотите записать, как SQL-запрос в Афине? В этом случае вы используете CREATE TABLE as, чтобы записать вывод запроса в другую таблицу Athena, которая автоматически запишет для вас новый набор файлов в S3. Я написал об этом здесь , и в документации Афины тоже есть много деталей.

...