Index: ql/src/java/org/apache/hadoop/hive/ql/stats/jdbc/JDBCStatsUtils.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/stats/jdbc/JDBCStatsUtils.java (revision 18416) +++ ql/src/java/org/apache/hadoop/hive/ql/stats/jdbc/JDBCStatsUtils.java (working copy) @@ -161,8 +161,8 @@ */ public static String getDeleteAggr(String rowID, String comment) { String delete = "DELETE /* " + comment + " */ " + - " FROM " + getStatTableName() + " WHERE " + JDBCStatsUtils.getIdColumnName() + " LIKE '" - + rowID + "%'"; + " FROM " + getStatTableName() + " WHERE " + JDBCStatsUtils.getIdColumnName() + + " LIKE ? ESCAPE ?"; return delete; } Index: ql/src/java/org/apache/hadoop/hive/ql/stats/jdbc/JDBCStatsAggregator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/stats/jdbc/JDBCStatsAggregator.java (revision 18416) +++ ql/src/java/org/apache/hadoop/hive/ql/stats/jdbc/JDBCStatsAggregator.java (working copy) @@ -210,8 +210,13 @@ }; try { + String keyPrefix = Utilities.escapeSqlLike(rowID) + "%"; + PreparedStatement delStmt = Utilities.prepareWithRetry(conn, JDBCStatsUtils.getDeleteAggr(rowID, comment), waitWindow, maxRetries); + delStmt.setString(1, keyPrefix); + delStmt.setString(2, Character.toString(Utilities.sqlEscapeChar)); + for (int failures = 0;; failures++) { try { Utilities.executeWithRetry(execUpdate, delStmt, waitWindow, maxRetries);