Я пытаюсь вставить данные в секционированную таблицу impala, используя подготовленные Java-операторы.Вставка работает хорошо с не разделенными, но я получаю ошибку с разделенными таблицами.
Мне нужно проверить разницу в производительности между секционированными и не секционированными. Мне кажется, лучше всего использовать подготовленные операторы для соединения.
create_query = "CREATE TABLE IF NOT EXISTS tbl_raw_flow_v9 (source_ip string,destination_ip string,protocol_number int,) partitioned by (year int) stored as parquet";
private static final String sqlCompiledQuery = "INSERT INTO tbl_raw_flow_v9 (source_ip,destination_ip,protocol_number" +
"PARTITION (year) VALUES (?,?,?,?)";
private static Connection connectViaDS() throws Exception {
Connection connection = null;
Class.forName("com.cloudera.impala.jdbc41.Driver");
connection = DriverManager.getConnection(CONNECTION_URL);
return connection;
}
# my try block
try {
connection = connectViaDS();
connection.setAutoCommit(false);
preparedStatement = connection.prepareStatement(sqlCompiledQuery);
while(counter <total) {
for (int index = 1; index <= records; index++) {
counter++;
preparedStatement.setString(1, "s_ip" + String.valueOf(index));
preparedStatement.setString(2, "d_ip" + String.valueOf(index));
preparedStatement.setInt(3, protocol_no + index);
preparedStatement.setInt(4, yr + flag);
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
preparedStatement.clearBatch();
connection.commit();
System.out.println("Counter = "+counter);
flag++;
}
}
Я не знаю, делаю ли я ошибкув использовании готового заявления или есть что-то еще.Я могу вставить значение в таблицу разделов, используя
"INSERT INTO tbl_raw_flow_v9 (source_ip,destination_ip,protocol_number) PARTITION (year) VALUES ("s_ip","d_ip",234,2010);
Когда я использую предоплатную выписку, я получаю следующую ошибку в java-
java.sql.SQLException: [Simba][JDBC](11420) Error, parameter metadata not populated.
at com.cloudera.exceptions.ExceptionConverter.toSQLException(Unknown Source)
at com.cloudera.jdbc.common.SPreparedStatement.<init>(Unknown Source)
at com.cloudera.jdbc.common4.C4SPreparedStatement.<init>(Unknown Source)
at com.cloudera.jdbc.jdbc41.S41PreparedStatement.<init>(Unknown Source)
at com.cloudera.jdbc.jdbc41.JDBC41ObjectFactory.createPreparedStatement(Unknown Source)
at com.cloudera.impala.jdbc41.ImpalaJDBC41ObjectFactory.createPreparedStatement(Unknown Source)
at com.cloudera.jdbc.common.SConnection.prepareStatement(Unknown Source)
at impala_test.writeInABatchWithCompiledQuery(impala_test.java:100)
at impala_test.main(impala_test.java:52)
Было бы очень полезно, если кто-то может пролить светна этом.