将数据从 AWS Athena 导入到 RDS 实例

Importing data from AWS Athena to RDS instance

目前我正在监听来自 AWS Kinesis 的事件并将它们写入 S3。然后我使用 AWS Glue 和 Athena 查询它们。

有没有办法将该数据导入 RDS 实例?

对于该任务,可以采用几种通用方法。

  1. 从 Athena 查询中读取数据到自定义 ETL 脚本(使用 JDBC connection)并加载到数据库中
  2. 将保存数据的 S3 存储桶挂载到文件系统(可能使用 s3fs-fuse),使用自定义 ETL 脚本读取数据,并将其推送到 RDS 实例
  3. 使用AWS CLI or the SDK将要上传到RDS实例的数据下载到文件系统,在本地处理,然后推送到RDS
  4. 按照您的建议,使用 AWS Glue 将数据从 Athena 导入到 RDS 实例。如果您正在构建与 AWS 紧密耦合的应用程序,并且您正在使用 Kinesis 和 Athena,那么这样的解决方案就很有意义。

将 GLUE 连接到 RDS 时要记住几件事(主要是在网络方面:

  1. 确保DNS Hostnames are enabled托管目标RDS实例的VPC
  2. 您需要在与目标 RDS 实例关联的安全组中设置 self-referencing rule

有关针对关系数据库的一些代码示例,请参阅以下内容tutorials

Postgres 的一种方法:

  1. 在 Postgres 中安装 S3 扩展: psql=> CREATE EXTENSION aws_s3 CASCADE;

  2. 运行在Athena中查询,在S3中找到CSV结果文件位置(S3输出位置在Athena设置中)(也可以查看“下载结果”按钮获取S3 路径)

  3. 在 Postgres 中创建您的 table

  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