Импорт данных из AWS Athena в экземпляр RDS
В настоящее время я слушаю события от AWS Kinesis и записываю их на S3. Затем я запрашиваю их, используя AWS Glue и Athena.
Есть ли способ импортировать эти данные, возможно, с некоторым преобразованием, в экземпляр RDS?
2 ответа
Существует несколько общих подходов к этой задаче.
- Считайте данные из запроса и запроса Athena в пользовательский сценарий ETL (используя соединение JDBC) и загрузите в базу данных.
- Смонтируйте корзину S3, содержащую данные, в файловую систему (возможно, с использованием s3fs-fuse), прочитайте данные с помощью пользовательского сценария ETL и отправьте их в экземпляр (ы) RDS.
- Загрузите данные для загрузки в экземпляр RDS в файловую систему с помощью интерфейса командной строки AWS или SDK, выполните локальную обработку и затем отправьте в RDS.
- Как вы предлагаете, используйте AWS Glue для импорта данных из Athena в экземпляр RDS. Если вы создаете приложение, которое тесно связано с AWS, и если вы используете Kinesis и Athena, то такое решение имеет смысл.
При подключении GLUE к RDS следует помнить о нескольких вещах (в основном, в сетевой части:
- Убедитесь, что в именах хостов DNS включен VPC, на котором размещен целевой экземпляр RDS.
- Вам нужно будет установить правило самоссылки в группе безопасности, связанной с целевым экземпляром RDS.
Некоторые примеры кода, предназначенного для реляционной базы данных, см. В следующих руководствах.
Один подход для Postgres:
Установите расширение S3 в Postgres:
psql=> CREATE EXTENSION aws_s3 CASCADE;
Запустите запрос в Athena и найдите расположение файла результатов CSV в S3 (расположение вывода S3 находится в настройках Athena)
Создайте свою таблицу в Postgres
Импорт из S3:
SELECT aws_s3.table_import_from_s3(
'newtable', '', '(format csv, header true)',
aws_commons.create_s3_uri('bucketname', 'reports/Unsaved/2021/05/10/aa9f04b0-d082-328g-5c9d-27982d345484.csv', 'us-east-1')
);
Если вы хотите преобразовать пустые значения в null, вы можете использовать это:
(format csv, FORCE_NULL (columnname), header true)
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html