Repository: hive Updated Branches: refs/heads/master a4bad8b3c -> 948684a7e
HIVE-18519 : do not create materialized CTEs with ACID/MM (Sergey Shelukhin, reviewed by Eugene Koifman) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/948684a7 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/948684a7 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/948684a7 Branch: refs/heads/master Commit: 948684a7e18e95bc9a1a990fd58cb7e790570749 Parents: a4bad8b Author: sergey <[email protected]> Authored: Thu Jan 25 14:04:40 2018 -0800 Committer: sergey <[email protected]> Committed: Thu Jan 25 14:04:40 2018 -0800 ---------------------------------------------------------------------- .../hadoop/hive/ql/parse/SemanticAnalyzer.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/948684a7/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 28e1041..83dfb47 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 @@ -268,6 +268,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { public static final String VALUES_TMP_TABLE_NAME_PREFIX = "Values__Tmp__Table__"; + /** Marks the temporary table created for a serialized CTE. The table is scoped to the query. */ static final String MATERIALIZATION_MARKER = "$MATERIALIZATION"; private HashMap<TableScanOperator, ExprNodeDesc> opToPartPruner; @@ -12059,7 +12060,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { */ private Map<String, String> addDefaultProperties( Map<String, String> tblProp, boolean isExt, StorageFormat storageFormat, - String qualifiedTableName, List<Order> sortCols) { + String qualifiedTableName, List<Order> sortCols, boolean isMaterialization) { Map<String, String> retValue; if (tblProp == null) { retValue = new HashMap<String, String>(); @@ -12083,15 +12084,15 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { HiveConf.getBoolVar(conf, ConfVars.HIVE_SUPPORT_CONCURRENCY) && DbTxnManager.class.getCanonicalName().equals(HiveConf.getVar(conf, ConfVars.HIVE_TXN_MANAGER)); if ((makeInsertOnly || makeAcid) - && !isExt && StringUtils.isBlank(storageFormat.getStorageHandler()) + && !isExt && !isMaterialization && StringUtils.isBlank(storageFormat.getStorageHandler()) //don't overwrite user choice if transactional attribute is explicitly set && !retValue.containsKey(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL)) { - if(makeInsertOnly) { + if (makeInsertOnly) { retValue.put(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL, "true"); retValue.put(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES, TransactionalValidationListener.INSERTONLY_TRANSACTIONAL_PROPERTY); } - if(makeAcid) { + if (makeAcid) { /*for CTAS, TransactionalValidationListener.makeAcid() runs to late to make table Acid so the initial write ends up running as non-acid...*/ try { @@ -12341,7 +12342,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { switch (command_type) { case CREATE_TABLE: // REGULAR CREATE TABLE DDL - tblProps = addDefaultProperties(tblProps, isExt, storageFormat, dbDotTab, sortCols); + tblProps = addDefaultProperties( + tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization); CreateTableDesc crtTblDesc = new CreateTableDesc(dbDotTab, isExt, isTemporary, cols, partCols, bucketCols, sortCols, numBuckets, rowFormatParams.fieldDelim, @@ -12362,7 +12364,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { break; case CTLT: // create table like <tbl_name> - tblProps = addDefaultProperties(tblProps, isExt, storageFormat, dbDotTab, sortCols); + tblProps = addDefaultProperties( + tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization); if (isTemporary) { Table likeTable = getTable(likeTableName, false); @@ -12439,7 +12442,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { } } - tblProps = addDefaultProperties(tblProps, isExt, storageFormat, dbDotTab, sortCols); + tblProps = addDefaultProperties( + tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization); tableDesc = new CreateTableDesc(qualifiedTabName[0], dbDotTab, isExt, isTemporary, cols, partCols, bucketCols, sortCols, numBuckets, rowFormatParams.fieldDelim, rowFormatParams.fieldEscape, rowFormatParams.collItemDelim, rowFormatParams.mapKeyDelim,
