java - 创建 AWS lambda 以将 csv 文件从 S3 复制到 RDS MySQL

标签 java mysql amazon-s3 amazon-rds

我正在尝试将至少 4 个 csv 文件从我的 S3 存储桶加载到我的 RDS Mysql 数据库中。每次将文件放入存储桶中时,它们都会有不同的名称。文件名末尾添加了日期。我希望它们在放入 S3 存储桶时自动上传到数据库。到目前为止,我所拥有的只是连接到数据库的加载功能。此时我只是想加载一个文件。一旦将文件放入 S3 存储桶,我该怎么做才能自动加载文件?感谢您的帮助!

lambda函数处理程序文件

public class LambdaFunctionHandler implements RequestHandler<Service, ResponseClass> {
public void loadService(){
    Statement stmt = null;
    try{
         Connection conn = DriverManager.getConnection("jdbc:mysql://connection/db", "user", "password");
        log.info("Connected to database.");


         //load date sql
         String query="LOAD DATA FROM S3 '"+ S3_BUCKET_NAME + "' INTO TABLE " + sTablename 
            + " FIELDS TERMINATED BY ',' ENCLOSED BY '\"' " 
            + "lines terminated by '\r\n' "+"IGNORE " + ignoreLines+" LINES";

         stmt.executeUpdate(query);
         System.out.println("loaded table.");

         conn.close();
    }catch(SQLException e){
        e.printStackTrace();
    }
}
@Override
public ResponseClass handleRequest(Service arg0, Context arg1) {
    String path="";

    return null;
}

最佳答案

如果您拥有要加载到 S3 中的任何文件的完整 key ,则标准 AmazonS3 客户端对象具有此方法:boolean doesObjectExist(String bucketName , 字符串对象名) .根据 S3 的“规则”,将文件上传到 S3 是原子的。除非文件已完全上传,否则指定的 S3 key 不会为此调用返回 true

因此您可以触发文件上传,并使用 doesObjectExist 调用测试完整性。完成后,执行您的 lambda 函数。

或者,S3 还有另一项服务(如果您想继续喂食 AWS 野兽),您可以在其中打开 Bucket 通知,或触发 Lambda 函数以执行这些通知之一。我记不起这个名字了。

关于java - 创建 AWS lambda 以将 csv 文件从 S3 复制到 RDS MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51714811/

相关文章:

java - 使用 gson 反序列化内部类返回 null

java - 如何设置颜色的 R、G、B 和 Alpha 分量?

mysql - 调试 MySQL WHERE 子句

mysql - 从两张表中取出数据sql

php - PHP 中的 Amazon S3 签名 URL

java - 使用 JPA 和 Oracle 管理具有增量 ID 的复合主键

java - 什么是java信号调度线程?

c# - 根据下拉选择 c# 填充 Listview

apache-spark - 对于相同的配置,Spark s3a会引发403错误

amazon-web-services - 如何使用命令行将文件从Amazon EC2移至S3存储桶