Импорт данных из AWS Athena в экземпляр RDS

В настоящее время я слушаю события от AWS Kinesis и записываю их на S3. Затем я запрашиваю их, используя AWS Glue и Athena.

Есть ли способ импортировать эти данные, возможно, с некоторым преобразованием, в экземпляр RDS?

2 ответа

Решение

Существует несколько общих подходов к этой задаче.

  1. Считайте данные из запроса и запроса Athena в пользовательский сценарий ETL (используя соединение JDBC) и загрузите в базу данных.
  2. Смонтируйте корзину S3, содержащую данные, в файловую систему (возможно, с использованием s3fs-fuse), прочитайте данные с помощью пользовательского сценария ETL и отправьте их в экземпляр (ы) RDS.
  3. Загрузите данные для загрузки в экземпляр RDS в файловую систему с помощью интерфейса командной строки AWS или SDK, выполните локальную обработку и затем отправьте в RDS.
  4. Как вы предлагаете, используйте AWS Glue для импорта данных из Athena в экземпляр RDS. Если вы создаете приложение, которое тесно связано с AWS, и если вы используете Kinesis и Athena, то такое решение имеет смысл.

При подключении GLUE к RDS следует помнить о нескольких вещах (в основном, в сетевой части:

  1. Убедитесь, что в именах хостов DNS включен VPC, на котором размещен целевой экземпляр RDS.
  2. Вам нужно будет установить правило самоссылки в группе безопасности, связанной с целевым экземпляром RDS.

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

Один подход для Postgres:

  1. Установите расширение S3 в Postgres: psql=> CREATE EXTENSION aws_s3 CASCADE;

  2. Запустите запрос в Athena и найдите расположение файла результатов CSV в S3 (расположение вывода S3 находится в настройках Athena)

  3. Создайте свою таблицу в Postgres

  4. Импорт из 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

Другие вопросы по тегам