我正在尝试从S3存储桶中至少加载4个csv文件到RDS Mysql数据库中。每次将文件放入存储桶时,它们都会使用不同的名称。文件名的末尾添加了日期。我希望将它们放在S3存储桶中后自动上传到数据库。到目前为止,我所拥有的只是用于连接数据库的加载功能。此时,我只是尝试加载一个文件。将文件放入S3存储桶后,如何自动加载该文件?感谢您的帮助!
lambdafunctionhandler文件
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;
}
答案 0 :(得分:0)
如果您具有要尝试加载到S3中的任何文件的完整密钥,则标准AmazonS3
客户端对象将具有以下方法:boolean doesObjectExist(String bucketName, String objectName)
。根据S3的“规则”,将文件上传到S3是原子的。除非文件完全上传,否则指定的S3键将不会为此调用返回true
。
因此,您可以触发文件上传,并通过doesObjectExist
调用测试完整性。完成后,执行lambda函数。
或者,S3还有另一项服务(如果您想继续喂AWS野兽),您可以在其中打开存储桶通知,或触发Lambda函数以其中的一个通知执行。我不记得这个名字了。