将数据从AWS Athena导入RDS实例

时间:2018-04-29 06:31:41

标签: amazon-s3 etl amazon-rds amazon-athena

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

有没有办法将这些数据(可能带有一些转换)导入RDS实例?

2 个答案:

答案 0 :(得分:5)

关于该任务,有几种一般方法。

  1. 将来自和Athena查询的数据读入自定义ETL脚本(使用JDBC connection)并加载到数据库中
  2. 将保存数据的S3存储桶挂载到文件系统(可能使用s3fs-fuse),使用自定义ETL脚本读取数据,然后将其推送到RDS实例
  3. 使用AWS CLISDK下载要上传到RDS实例的数据到文件系统,在本地处理,然后推送到RDS
  4. 如您所知,使用AWS Glue将数据从Athena导入RDS实例。如果您正在构建一个与AWS紧密结合的应用程序,并且如果您正在使用Kinesis和Athena,那么这样的解决方案是有道理的。
  5. 将GLUE连接到RDS时要记住几件事(主要是在网络方面:

    1. 确保DNS Hostnames are enabled托管目标RDS实例的VPC
    2. 您需要在与目标RDS实例关联的安全组中设置self-referencing rule
    3. 有关目标关系数据库的代码的一些示例,请参阅以下tutorials

答案 1 :(得分:1)

Postgres 的一种方法:

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

  2. 在 Athena 中运行查询并在 S3 中找到 CSV 结果文件位置(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