Repository: hive Updated Branches: refs/heads/branch-3 d9744b549 -> ce99abac5
HIVE-19687 : Export table on acid partitioned table is failing (Vineet Garg via Ashutosh Chauhan) Signed-off-by: Ashutosh Chauhan <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ce99abac Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ce99abac Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ce99abac Branch: refs/heads/branch-3 Commit: ce99abac51642191224c88d4e754e6fb7f8722c9 Parents: d9744b5 Author: Vineet Garg <[email protected]> Authored: Thu May 24 21:09:00 2018 -0700 Committer: Ashutosh Chauhan <[email protected]> Committed: Tue Jun 5 09:43:40 2018 -0700 ---------------------------------------------------------------------- .../test/resources/testconfiguration.properties | 1 + .../ql/parse/ColumnStatsSemanticAnalyzer.java | 28 +------------------- .../hadoop/hive/ql/parse/SemanticAnalyzer.java | 27 +++++++++++++++++++ .../ql/parse/UpdateDeleteSemanticAnalyzer.java | 4 ++- 4 files changed, 32 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/ce99abac/itests/src/test/resources/testconfiguration.properties ---------------------------------------------------------------------- diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 00ecd58..8af7bf4 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -435,6 +435,7 @@ minillap.query.files=acid_bucket_pruning.q,\ minillaplocal.query.files=\ dp_counter_non_mm.q,\ dp_counter_mm.q,\ + acid_export.q,\ acid_no_buckets.q, \ acid_globallimit.q,\ acid_vectorization_missing_cols.q,\ http://git-wip-us.apache.org/repos/asf/hive/blob/ce99abac/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java index 7cb1724..9aff006 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java @@ -162,7 +162,7 @@ public class ColumnStatsSemanticAnalyzer extends SemanticAnalyzer { } else { whereClause.append(" and "); } - whereClause.append("`").append(partKey).append("` = ").append(genPartValueString(partKey, value)); + whereClause.append("`").append(partKey).append("` = ").append(genPartValueString(getColTypeOf(partKey), value)); } } @@ -179,33 +179,7 @@ public class ColumnStatsSemanticAnalyzer extends SemanticAnalyzer { return predPresent ? whereClause.append(groupByClause) : groupByClause; } - private String genPartValueString(String partKey, String partVal) throws SemanticException { - String returnVal = partVal; - String partColType = getColTypeOf(partKey); - if (partColType.equals(serdeConstants.STRING_TYPE_NAME) || - partColType.contains(serdeConstants.VARCHAR_TYPE_NAME) || - partColType.contains(serdeConstants.CHAR_TYPE_NAME)) { - returnVal = "'" + escapeSQLString(partVal) + "'"; - } else if (partColType.equals(serdeConstants.TINYINT_TYPE_NAME)) { - returnVal = partVal + "Y"; - } else if (partColType.equals(serdeConstants.SMALLINT_TYPE_NAME)) { - returnVal = partVal + "S"; - } else if (partColType.equals(serdeConstants.INT_TYPE_NAME)) { - returnVal = partVal; - } else if (partColType.equals(serdeConstants.BIGINT_TYPE_NAME)) { - returnVal = partVal + "L"; - } else if (partColType.contains(serdeConstants.DECIMAL_TYPE_NAME)) { - returnVal = partVal + "BD"; - } else if (partColType.equals(serdeConstants.DATE_TYPE_NAME) || - partColType.equals(serdeConstants.TIMESTAMP_TYPE_NAME)) { - returnVal = partColType + " '" + escapeSQLString(partVal) + "'"; - } else { - //for other usually not used types, just quote the value - returnVal = "'" + escapeSQLString(partVal) + "'"; - } - return returnVal; - } private String getColTypeOf(String partKey) throws SemanticException{ http://git-wip-us.apache.org/repos/asf/hive/blob/ce99abac/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index f3eff0f..2e055ab 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -533,6 +533,33 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { return ctx.getOpContext(); } + public String genPartValueString(String partColType, String partVal) throws SemanticException { + String returnVal = partVal; + if (partColType.equals(serdeConstants.STRING_TYPE_NAME) || + partColType.contains(serdeConstants.VARCHAR_TYPE_NAME) || + partColType.contains(serdeConstants.CHAR_TYPE_NAME)) { + returnVal = "'" + escapeSQLString(partVal) + "'"; + } else if (partColType.equals(serdeConstants.TINYINT_TYPE_NAME)) { + returnVal = partVal + "Y"; + } else if (partColType.equals(serdeConstants.SMALLINT_TYPE_NAME)) { + returnVal = partVal + "S"; + } else if (partColType.equals(serdeConstants.INT_TYPE_NAME)) { + returnVal = partVal; + } else if (partColType.equals(serdeConstants.BIGINT_TYPE_NAME)) { + returnVal = partVal + "L"; + } else if (partColType.contains(serdeConstants.DECIMAL_TYPE_NAME)) { + returnVal = partVal + "BD"; + } else if (partColType.equals(serdeConstants.DATE_TYPE_NAME) || + partColType.equals(serdeConstants.TIMESTAMP_TYPE_NAME)) { + returnVal = partColType + " '" + escapeSQLString(partVal) + "'"; + } else { + //for other usually not used types, just quote the value + returnVal = "'" + escapeSQLString(partVal) + "'"; + } + + return returnVal; + } + public void doPhase1QBExpr(ASTNode ast, QBExpr qbexpr, String id, String alias) throws SemanticException { doPhase1QBExpr(ast, qbexpr, id, alias, false); http://git-wip-us.apache.org/repos/asf/hive/blob/ce99abac/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java index 512f1ff..8e5118b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java @@ -277,7 +277,9 @@ public class UpdateDeleteSemanticAnalyzer extends SemanticAnalyzer { TableSpec exportTableSpec = new TableSpec(db, conf, tableTree, false, true); if(exportTableSpec.getPartSpec() != null) { StringBuilder whereClause = null; + int partColsIdx = -1; //keep track of corresponding col in partCols for(Map.Entry<String, String> ent : exportTableSpec.getPartSpec().entrySet()) { + partColsIdx++; if(ent.getValue() == null) { continue; //partial spec } @@ -288,7 +290,7 @@ public class UpdateDeleteSemanticAnalyzer extends SemanticAnalyzer { whereClause.append(" AND "); } whereClause.append(HiveUtils.unparseIdentifier(ent.getKey(), conf)) - .append(" = ").append(ent.getValue()); + .append(" = ").append(genPartValueString(partCols.get(partColsIdx).getType(), ent.getValue())); } if(whereClause != null) { rewrittenQueryStr.append(whereClause);
