我正在开发的应用程序在AWS Redshift上运行一系列查询。由于数据量的原因,某些查询需要更长的时间才能执行。
当我检查服务器上的执行细节时,查询似乎在Redshift上完成。但是,java应用程序似乎无限期挂起而不会抛出任何异常甚至终止。
这是执行查询的代码。
private void execSQLStrings(String[] queries, String dataset, String dbType) throws Exception {
Connection conn = null;
if (dbType.equals("redshift")) {
conn=getRedshiftConnection();
} else if (dbType.equals("rds")){
conn=getMySQLConnection();
}
Statement stmt=conn.createStatement();
String qry=null;
debug("Query Length: " + queries.length);
for (int ii=0;ii<queries.length;++ii) {
qry=queries[ii];
if (dataset != null) {
qry=qry.replaceAll("DATASET",dataset);
}
debug(qry);
stmt.execute(qry);
}
stmt.close();
conn.close();
}
我无法发布我现在正在运行的查询,但它有多个表连接和按条件分组,以及一个800米的行表。在服务器上完成查询大约需要7~8分钟。
答案 0 :(得分:1)
您需要更新DSN超时和/或KeepAlive设置,以确保您的连接保持活跃状态。 请参阅:http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html