This is an automated email from the ASF dual-hosted git repository.
dkuzmenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 339872bed72 HIVE-26680: Make CMV use Direct Insert Semantics (Sourabh
Badhya, reviewed by Denys Kuzmenko, Laszlo Vegh)
339872bed72 is described below
commit 339872bed725cfd27cb579331562b5ebb0e6857f
Author: Sourabh Badhya <[email protected]>
AuthorDate: Mon Nov 21 14:10:14 2022 +0530
HIVE-26680: Make CMV use Direct Insert Semantics (Sourabh Badhya, reviewed
by Denys Kuzmenko, Laszlo Vegh)
Closes #3715
---
.../test/resources/testconfiguration.properties | 3 +
.../view/create/CreateMaterializedViewDesc.java | 10 +-
.../org/apache/hadoop/hive/ql/exec/Utilities.java | 12 +
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 79 ++---
.../apache/hadoop/hive/ql/parse/TaskCompiler.java | 23 +-
ql/src/test/queries/clientpositive/cmv_direct.q | 52 ++++
.../cmv_direct_with_specified_locations.q | 52 ++++
.../cmv_direct_with_suffixed_locations.q | 53 ++++
.../results/clientpositive/llap/cmv_direct.q.out | 307 ++++++++++++++++++++
.../llap/cmv_direct_with_specified_locations.q.out | 317 +++++++++++++++++++++
.../llap/cmv_direct_with_suffixed_locations.q.out | 307 ++++++++++++++++++++
.../llap/materialized_view_create.q.out | 2 +-
12 files changed, 1160 insertions(+), 57 deletions(-)
diff --git a/itests/src/test/resources/testconfiguration.properties
b/itests/src/test/resources/testconfiguration.properties
index 0b589fe4d36..5b94366b861 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -51,6 +51,9 @@ minillap.query.files=\
binary_output_format.q,\
bucket5.q,\
bucket6.q,\
+ cmv_direct.q,\
+ cmv_direct_with_specified_locations.q,\
+ cmv_direct_with_suffixed_locations.q,\
create_genericudaf.q,\
create_table.q,\
create_udaf.q,\
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateMaterializedViewDesc.java
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateMaterializedViewDesc.java
index 5f34b8bb7c3..7ab0589b71f 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateMaterializedViewDesc.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateMaterializedViewDesc.java
@@ -75,7 +75,7 @@ public class CreateMaterializedViewDesc implements DDLDesc,
Serializable {
private List<FieldSchema> sortCols;
private List<String> distributeColNames;
private List<FieldSchema> distributeCols;
- private Long initialMmWriteId; // Initial MM write ID for CMV and import.
+ private Long initialWriteId; // Initial write ID for CMV and import.
// The FSOP configuration for the FSOP that is going to write initial data
during cmv.
// This is not needed beyond compilation, so it is transient.
private transient FileSinkDesc writer;
@@ -389,12 +389,12 @@ public class CreateMaterializedViewDesc implements
DDLDesc, Serializable {
return tbl;
}
- public void setInitialMmWriteId(Long mmWriteId) {
- this.initialMmWriteId = mmWriteId;
+ public void setInitialWriteId(Long writeId) {
+ this.initialWriteId = writeId;
}
- public Long getInitialMmWriteId() {
- return initialMmWriteId;
+ public Long getInitialWriteId() {
+ return initialWriteId;
}
public FileSinkDesc getAndUnsetWriter() {
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
index 0eb568614e5..b2c3fbbda1f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
@@ -5010,4 +5010,16 @@ public final class Utilities {
return ((p1.toString().toLowerCase().indexOf(p2.toString().toLowerCase())
> -1) ||
(p2.toString().toLowerCase().indexOf(p1.toString().toLowerCase()) >
-1)) ? true : false;
}
+
+ public static String getTableOrMVSuffix(Context context, boolean
createTableOrMVUseSuffix) {
+ String suffix = "";
+ if (createTableOrMVUseSuffix) {
+ long txnId = Optional.ofNullable(context)
+ .map(ctx ->
ctx.getHiveTxnManager().getCurrentTxnId()).orElse(0L);
+ if (txnId != 0) {
+ suffix = AcidUtils.getPathSuffix(txnId);
+ }
+ }
+ return suffix;
+ }
}
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 a298e5355b2..50f2078a233 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
@@ -7615,30 +7615,44 @@ public class SemanticAnalyzer extends
BaseSemanticAnalyzer {
destTableIsMaterialization = false;
tableName =
HiveTableName.ofNullableWithNoDefault(viewDesc.getViewName());
tblProps = viewDesc.getTblProps();
+ // Add suffix only when required confs are present
+ // and user has not specified a location to the table.
+ createTableUseSuffix = (HiveConf.getBoolVar(conf,
ConfVars.HIVE_ACID_CREATE_TABLE_USE_SUFFIX)
+ || HiveConf.getBoolVar(conf,
ConfVars.HIVE_ACID_LOCKLESS_READS_ENABLED))
+ && viewDesc.getLocation() == null;
}
destTableIsTransactional = tblProps != null &&
AcidUtils.isTablePropertyTransactional(tblProps);
if (destTableIsTransactional) {
isNonNativeTable = MetaStoreUtils.isNonNativeTable(tblProps);
boolean isCtas = tblDesc != null && tblDesc.isCTAS();
+ boolean isCMV = viewDesc != null && qb.isMaterializedView();
isMmTable = isMmCreate = AcidUtils.isInsertOnlyTable(tblProps);
- if (!isNonNativeTable && !destTableIsTemporary && isCtas) {
+ if (!isNonNativeTable && !destTableIsTemporary && (isCtas || isCMV)) {
destTableIsFullAcid = AcidUtils.isFullAcidTable(tblProps);
acidOperation = getAcidType(dest);
isDirectInsert = isDirectInsert(destTableIsFullAcid, acidOperation);
if (isDirectInsert || isMmTable) {
- destinationPath = getCtasLocation(tblDesc, createTableUseSuffix);
+ destinationPath = getCtasOrCMVLocation(tblDesc, viewDesc,
createTableUseSuffix);
if (createTableUseSuffix) {
- tblDesc.getTblProps().put(SOFT_DELETE_TABLE,
Boolean.TRUE.toString());
+ if (tblDesc != null) {
+ tblDesc.getTblProps().put(SOFT_DELETE_TABLE,
Boolean.TRUE.toString());
+ } else {
+ viewDesc.getTblProps().put(SOFT_DELETE_TABLE,
Boolean.TRUE.toString());
+ }
}
// Set the location in context for possible rollback.
ctx.setLocation(destinationPath);
// Setting the location so that metadata transformers
// does not change the location later while creating the table.
- tblDesc.setLocation(destinationPath.toString());
+ if (tblDesc != null) {
+ tblDesc.setLocation(destinationPath.toString());
+ } else {
+ viewDesc.setLocation(destinationPath.toString());
+ }
} else {
// Set the location in context for possible rollback.
- ctx.setLocation(getCtasLocation(tblDesc, createTableUseSuffix));
+ ctx.setLocation(getCtasOrCMVLocation(tblDesc, viewDesc,
createTableUseSuffix));
}
}
try {
@@ -7650,14 +7664,12 @@ public class SemanticAnalyzer extends
BaseSemanticAnalyzer {
} catch (LockException ex) {
throw new SemanticException("Failed to allocate write Id", ex);
}
- if (isMmTable) {
+ if (isMmTable || isDirectInsert) {
if (tblDesc != null) {
tblDesc.setInitialWriteId(writeId);
} else {
- viewDesc.setInitialMmWriteId(writeId);
+ viewDesc.setInitialWriteId(writeId);
}
- } else if (isDirectInsert) {
- tblDesc.setInitialWriteId(writeId);
}
}
@@ -7936,17 +7948,13 @@ public class SemanticAnalyzer extends
BaseSemanticAnalyzer {
destinationPath, currentTableId, destTableIsFullAcid,
destTableIsTemporary,//this was 1/4 acid
destTableIsMaterialization, queryTmpdir, rsCtx, dpCtx, lbCtx, fsRS,
canBeMerged, destinationTable, writeId, isMmCreate, destType, qb,
isDirectInsert, acidOperation, moveTaskId);
- if (isMmCreate) {
+ if (isMmCreate || (qb.isCTAS() || qb.isMaterializedView()) &&
isDirectInsert) {
// Add FSD so that the LoadTask compilation could fix up its path to
avoid the move.
if (tableDesc != null) {
tableDesc.setWriter(fileSinkDesc);
} else {
createVwDesc.setWriter(fileSinkDesc);
}
- } else if (qb.isCTAS() && isDirectInsert) {
- if (tableDesc != null) {
- tableDesc.setWriter(fileSinkDesc);
- }
}
if (fileSinkDesc.getInsertOverwrite()) {
@@ -8009,19 +8017,28 @@ public class SemanticAnalyzer extends
BaseSemanticAnalyzer {
return true;
}
- private Path getCtasLocation(CreateTableDesc tblDesc, boolean
createTableWithSuffix) throws SemanticException {
+ private Path getCtasOrCMVLocation(CreateTableDesc tblDesc,
CreateMaterializedViewDesc viewDesc,
+ boolean createTableWithSuffix) throws
SemanticException {
Path location;
+ String[] names;
+ String protoName = null;
+ Table tbl;
try {
- String protoName = tblDesc.getDbTableName();
- String[] names = Utilities.getDbTableName(protoName);
-
- // Handle table translation initially and if not present
- // use default table path.
- // Property modifications of the table is handled later.
- // We are interested in the location if it has changed
- // due to table translation.
- Table tbl = tblDesc.toTable(conf);
- tbl = db.getTranslateTableDryrun(tbl.getTTable());
+ if (tblDesc != null) {
+ protoName = tblDesc.getDbTableName();
+
+ // Handle table translation initially and if not present
+ // use default table path.
+ // Property modifications of the table is handled later.
+ // We are interested in the location if it has changed
+ // due to table translation.
+ tbl = tblDesc.toTable(conf);
+ tbl = db.getTranslateTableDryrun(tbl.getTTable());
+ } else {
+ protoName = viewDesc.getViewName();
+ tbl = viewDesc.toTable(conf);
+ }
+ names = Utilities.getDbTableName(protoName);
Warehouse wh = new Warehouse(conf);
if (tbl.getSd() == null
@@ -8032,9 +8049,8 @@ public class SemanticAnalyzer extends
BaseSemanticAnalyzer {
}
if (createTableWithSuffix) {
- long txnId = ctx.getHiveTxnManager().getCurrentTxnId();
- String suffix = AcidUtils.getPathSuffix(txnId);
- location = new Path(location.toString() + suffix);
+ location = new Path(location.toString() +
+ Utilities.getTableOrMVSuffix(ctx, createTableWithSuffix));
}
return location;
@@ -8336,11 +8352,8 @@ public class SemanticAnalyzer extends
BaseSemanticAnalyzer {
Path tlocation = null;
String tName = Utilities.getDbTableName(tableDesc.getDbTableName())[1];
try {
- String suffix = "";
- if (AcidUtils.isTableSoftDeleteEnabled(destinationTable, conf)) {
- long txnId = ctx.getHiveTxnManager().getCurrentTxnId();
- suffix = AcidUtils.getPathSuffix(txnId);
- }
+ String suffix = Utilities.getTableOrMVSuffix(ctx,
+ AcidUtils.isTableSoftDeleteEnabled(destinationTable, conf));
Warehouse wh = new Warehouse(conf);
tlocation =
wh.getDefaultTablePath(db.getDatabase(tableDesc.getDatabaseName()),
tName + suffix, tableDesc.isExternal());
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
b/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
index 8cc755e7d13..193af2d695c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
@@ -98,7 +98,6 @@ import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
/**
@@ -473,10 +472,10 @@ public abstract class TaskCompiler {
} else {
CreateMaterializedViewDesc cmv = pCtx.getCreateViewDesc();
dataSink = cmv.getAndUnsetWriter();
- txnId = cmv.getInitialMmWriteId();
+ txnId = cmv.getInitialWriteId();
loc = cmv.getLocation();
}
- Path location = (loc == null) ? getDefaultCtasLocation(pCtx) : new
Path(loc);
+ Path location = (loc == null) ? getDefaultCtasOrCMVLocation(pCtx) : new
Path(loc);
if (pCtx.getQueryProperties().isCTAS()) {
CreateTableDesc ctd = pCtx.getCreateTable();
if (HiveConf.getBoolVar(conf,
HiveConf.ConfVars.CREATE_TABLE_AS_EXTERNAL)) {
@@ -511,7 +510,7 @@ public abstract class TaskCompiler {
lfd.setTargetDir(location);
}
- private Path getDefaultCtasLocation(final ParseContext pCtx) throws
SemanticException {
+ private Path getDefaultCtasOrCMVLocation(final ParseContext pCtx) throws
SemanticException {
try {
String protoName = null, suffix = "";
boolean isExternal = false;
@@ -522,11 +521,11 @@ public abstract class TaskCompiler {
protoName = pCtx.getCreateTable().getDbTableName();
isExternal = pCtx.getCreateTable().isExternal();
createTableOrMVUseSuffix &=
AcidUtils.isTransactionalTable(pCtx.getCreateTable());
- suffix = getTableOrMVSuffix(pCtx, createTableOrMVUseSuffix);
+ suffix = Utilities.getTableOrMVSuffix(pCtx.getContext(),
createTableOrMVUseSuffix);
} else if (pCtx.getQueryProperties().isMaterializedView()) {
protoName = pCtx.getCreateViewDesc().getViewName();
createTableOrMVUseSuffix &=
AcidUtils.isTransactionalView(pCtx.getCreateViewDesc());
- suffix = getTableOrMVSuffix(pCtx, createTableOrMVUseSuffix);
+ suffix = Utilities.getTableOrMVSuffix(pCtx.getContext(),
createTableOrMVUseSuffix);
}
String[] names = Utilities.getDbTableName(protoName);
if (!db.databaseExists(names[0])) {
@@ -539,18 +538,6 @@ public abstract class TaskCompiler {
}
}
- public String getTableOrMVSuffix(ParseContext pCtx, boolean
createTableOrMVUseSuffix) {
- String suffix = "";
- if (createTableOrMVUseSuffix) {
- long txnId = Optional.ofNullable(pCtx.getContext())
- .map(ctx ->
ctx.getHiveTxnManager().getCurrentTxnId()).orElse(0L);
- if (txnId != 0) {
- suffix = AcidUtils.getPathSuffix(txnId);
- }
- }
- return suffix;
- }
-
private void patchUpAfterCTASorMaterializedView(List<Task<?>> rootTasks,
Set<ReadEntity> inputs, Set<WriteEntity> outputs, Task<?> createTask,
boolean createTaskAfterMoveTask) {
diff --git a/ql/src/test/queries/clientpositive/cmv_direct.q
b/ql/src/test/queries/clientpositive/cmv_direct.q
new file mode 100644
index 00000000000..a443149a529
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/cmv_direct.q
@@ -0,0 +1,52 @@
+-- SORT_QUERY_RESULTS
+--! qt:dataset:alltypesorc
+
+set hive.support.concurrency=true;
+set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
+set hive.acid.direct.insert.enabled=true;
+
+DROP TABLE IF EXISTS source;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv;
+
+CREATE TABLE source STORED AS ORC TBLPROPERTIES('transactional'='true') AS
(SELECT cint, cfloat, cdouble, cstring1, ctimestamp1 FROM alltypesorc);
+
+CREATE MATERIALIZED VIEW test_orc_cmv STORED AS ORC
TBLPROPERTIES('transactional'='true') AS ((SELECT * FROM source WHERE cint >
200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_orc_mmcmv STORED AS ORC
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_parquet_mmcmv STORED AS PARQUET
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_avro_mmcmv STORED AS AVRO
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_textfile_mmcmv STORED AS TEXTFILE
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+SELECT * FROM test_orc_cmv ORDER BY cint;
+
+SELECT * FROM test_orc_mmcmv ORDER BY cint;
+
+SELECT * FROM test_parquet_mmcmv ORDER BY cint;
+
+SELECT * FROM test_avro_mmcmv ORDER BY cint;
+
+SELECT * FROM test_textfile_mmcmv ORDER BY cint;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv;
+
+DROP TABLE IF EXISTS source;
\ No newline at end of file
diff --git
a/ql/src/test/queries/clientpositive/cmv_direct_with_specified_locations.q
b/ql/src/test/queries/clientpositive/cmv_direct_with_specified_locations.q
new file mode 100644
index 00000000000..e8df67ebdc2
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/cmv_direct_with_specified_locations.q
@@ -0,0 +1,52 @@
+-- SORT_QUERY_RESULTS
+--! qt:dataset:alltypesorc
+
+set hive.support.concurrency=true;
+set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
+set hive.acid.direct.insert.enabled=true;
+
+DROP TABLE IF EXISTS source;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv;
+
+CREATE TABLE source STORED AS ORC TBLPROPERTIES('transactional'='true') AS
(SELECT cint, cfloat, cdouble, cstring1, ctimestamp1 FROM alltypesorc);
+
+CREATE MATERIALIZED VIEW test_orc_cmv STORED AS ORC LOCATION
'/build/ql/test/data/warehouse/test_cmv_orc'
TBLPROPERTIES('transactional'='true') AS ((SELECT * FROM source WHERE cint >
200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_orc_mmcmv STORED AS ORC LOCATION
'/build/ql/test/data/warehouse/test_mmcmv_orc'
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_parquet_mmcmv STORED AS PARQUET LOCATION
'/build/ql/test/data/warehouse/test_mmcmv_parquet'
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_avro_mmcmv STORED AS AVRO LOCATION
'/build/ql/test/data/warehouse/test_mmcmv_avro'
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_textfile_mmcmv STORED AS TEXTFILE LOCATION
'/build/ql/test/data/warehouse/test_mmcmv_textfile'
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+SELECT * FROM test_orc_cmv ORDER BY cint;
+
+SELECT * FROM test_orc_mmcmv ORDER BY cint;
+
+SELECT * FROM test_parquet_mmcmv ORDER BY cint;
+
+SELECT * FROM test_avro_mmcmv ORDER BY cint;
+
+SELECT * FROM test_textfile_mmcmv ORDER BY cint;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv;
+
+DROP TABLE IF EXISTS source;
\ No newline at end of file
diff --git
a/ql/src/test/queries/clientpositive/cmv_direct_with_suffixed_locations.q
b/ql/src/test/queries/clientpositive/cmv_direct_with_suffixed_locations.q
new file mode 100644
index 00000000000..7c52a5e702c
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/cmv_direct_with_suffixed_locations.q
@@ -0,0 +1,53 @@
+-- SORT_QUERY_RESULTS
+--! qt:dataset:alltypesorc
+
+set hive.support.concurrency=true;
+set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
+set hive.acid.direct.insert.enabled=true;
+set hive.acid.createtable.softdelete=true;
+
+DROP TABLE IF EXISTS source;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv;
+
+CREATE TABLE source STORED AS ORC TBLPROPERTIES('transactional'='true') AS
(SELECT cint, cfloat, cdouble, cstring1, ctimestamp1 FROM alltypesorc);
+
+CREATE MATERIALIZED VIEW test_orc_cmv STORED AS ORC
TBLPROPERTIES('transactional'='true') AS ((SELECT * FROM source WHERE cint >
200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_orc_mmcmv STORED AS ORC
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_parquet_mmcmv STORED AS PARQUET
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_avro_mmcmv STORED AS AVRO
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+CREATE MATERIALIZED VIEW test_textfile_mmcmv STORED AS TEXTFILE
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10));
+
+SELECT * FROM test_orc_cmv ORDER BY cint;
+
+SELECT * FROM test_orc_mmcmv ORDER BY cint;
+
+SELECT * FROM test_parquet_mmcmv ORDER BY cint;
+
+SELECT * FROM test_avro_mmcmv ORDER BY cint;
+
+SELECT * FROM test_textfile_mmcmv ORDER BY cint;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv;
+
+DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv;
+
+DROP TABLE IF EXISTS source;
\ No newline at end of file
diff --git a/ql/src/test/results/clientpositive/llap/cmv_direct.q.out
b/ql/src/test/results/clientpositive/llap/cmv_direct.q.out
new file mode 100644
index 00000000000..9baf3f7045b
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/cmv_direct.q.out
@@ -0,0 +1,307 @@
+PREHOOK: query: DROP TABLE IF EXISTS source
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS source
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: CREATE TABLE source STORED AS ORC
TBLPROPERTIES('transactional'='true') AS (SELECT cint, cfloat, cdouble,
cstring1, ctimestamp1 FROM alltypesorc)
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@alltypesorc
+PREHOOK: Output: database:default
+PREHOOK: Output: default@source
+POSTHOOK: query: CREATE TABLE source STORED AS ORC
TBLPROPERTIES('transactional'='true') AS (SELECT cint, cfloat, cdouble,
cstring1, ctimestamp1 FROM alltypesorc)
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@alltypesorc
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@source
+POSTHOOK: Lineage: source.cdouble SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cdouble, type:double, comment:null),
]
+POSTHOOK: Lineage: source.cfloat SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: source.cint SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: source.cstring1 SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cstring1, type:string,
comment:null), ]
+POSTHOOK: Lineage: source.ctimestamp1 SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:ctimestamp1, type:timestamp,
comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_orc_cmv STORED AS ORC
TBLPROPERTIES('transactional'='true') AS ((SELECT * FROM source WHERE cint >
200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_orc_cmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_orc_cmv STORED AS ORC
TBLPROPERTIES('transactional'='true') AS ((SELECT * FROM source WHERE cint >
200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_orc_cmv
+POSTHOOK: Lineage: test_orc_cmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_orc_mmcmv STORED AS ORC
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_orc_mmcmv STORED AS ORC
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: Lineage: test_orc_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_parquet_mmcmv STORED AS PARQUET
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_parquet_mmcmv STORED AS PARQUET
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: Lineage: test_parquet_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_avro_mmcmv STORED AS AVRO
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_avro_mmcmv STORED AS AVRO
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: Lineage: test_avro_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_textfile_mmcmv STORED AS
TEXTFILE TBLPROPERTIES('transactional'='true',
'transactional_properties'='insert_only') AS ((SELECT * FROM source WHERE cint
> 200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_textfile_mmcmv STORED AS
TEXTFILE TBLPROPERTIES('transactional'='true',
'transactional_properties'='insert_only') AS ((SELECT * FROM source WHERE cint
> 200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: Lineage: test_textfile_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+PREHOOK: query: SELECT * FROM test_orc_cmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_orc_cmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_orc_cmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_orc_cmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_orc_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_orc_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_orc_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_orc_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_parquet_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_parquet_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_parquet_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_parquet_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_avro_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_avro_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_avro_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_avro_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_textfile_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_textfile_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_textfile_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_textfile_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_orc_cmv
+PREHOOK: Output: default@test_orc_cmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_orc_cmv
+POSTHOOK: Output: default@test_orc_cmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_orc_mmcmv
+PREHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_orc_mmcmv
+POSTHOOK: Output: default@test_orc_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_parquet_mmcmv
+PREHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_parquet_mmcmv
+POSTHOOK: Output: default@test_parquet_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_avro_mmcmv
+PREHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_avro_mmcmv
+POSTHOOK: Output: default@test_avro_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_textfile_mmcmv
+PREHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_textfile_mmcmv
+POSTHOOK: Output: default@test_textfile_mmcmv
+PREHOOK: query: DROP TABLE IF EXISTS source
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@source
+PREHOOK: Output: default@source
+POSTHOOK: query: DROP TABLE IF EXISTS source
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@source
+POSTHOOK: Output: default@source
diff --git
a/ql/src/test/results/clientpositive/llap/cmv_direct_with_specified_locations.q.out
b/ql/src/test/results/clientpositive/llap/cmv_direct_with_specified_locations.q.out
new file mode 100644
index 00000000000..484ba4979eb
--- /dev/null
+++
b/ql/src/test/results/clientpositive/llap/cmv_direct_with_specified_locations.q.out
@@ -0,0 +1,317 @@
+PREHOOK: query: DROP TABLE IF EXISTS source
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS source
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: CREATE TABLE source STORED AS ORC
TBLPROPERTIES('transactional'='true') AS (SELECT cint, cfloat, cdouble,
cstring1, ctimestamp1 FROM alltypesorc)
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@alltypesorc
+PREHOOK: Output: database:default
+PREHOOK: Output: default@source
+POSTHOOK: query: CREATE TABLE source STORED AS ORC
TBLPROPERTIES('transactional'='true') AS (SELECT cint, cfloat, cdouble,
cstring1, ctimestamp1 FROM alltypesorc)
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@alltypesorc
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@source
+POSTHOOK: Lineage: source.cdouble SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cdouble, type:double, comment:null),
]
+POSTHOOK: Lineage: source.cfloat SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: source.cint SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: source.cstring1 SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cstring1, type:string,
comment:null), ]
+POSTHOOK: Lineage: source.ctimestamp1 SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:ctimestamp1, type:timestamp,
comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+#### A masked pattern was here ####
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_orc_cmv
+#### A masked pattern was here ####
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_orc_cmv
+POSTHOOK: Lineage: test_orc_cmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+#### A masked pattern was here ####
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_orc_mmcmv
+#### A masked pattern was here ####
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: Lineage: test_orc_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+#### A masked pattern was here ####
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_parquet_mmcmv
+#### A masked pattern was here ####
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: Lineage: test_parquet_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+#### A masked pattern was here ####
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_avro_mmcmv
+#### A masked pattern was here ####
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: Lineage: test_avro_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+#### A masked pattern was here ####
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_textfile_mmcmv
+#### A masked pattern was here ####
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: Lineage: test_textfile_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+PREHOOK: query: SELECT * FROM test_orc_cmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_orc_cmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_orc_cmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_orc_cmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_orc_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_orc_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_orc_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_orc_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_parquet_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_parquet_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_parquet_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_parquet_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_avro_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_avro_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_avro_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_avro_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_textfile_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_textfile_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_textfile_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_textfile_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_orc_cmv
+PREHOOK: Output: default@test_orc_cmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_orc_cmv
+POSTHOOK: Output: default@test_orc_cmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_orc_mmcmv
+PREHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_orc_mmcmv
+POSTHOOK: Output: default@test_orc_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_parquet_mmcmv
+PREHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_parquet_mmcmv
+POSTHOOK: Output: default@test_parquet_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_avro_mmcmv
+PREHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_avro_mmcmv
+POSTHOOK: Output: default@test_avro_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_textfile_mmcmv
+PREHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_textfile_mmcmv
+POSTHOOK: Output: default@test_textfile_mmcmv
+PREHOOK: query: DROP TABLE IF EXISTS source
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@source
+PREHOOK: Output: default@source
+POSTHOOK: query: DROP TABLE IF EXISTS source
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@source
+POSTHOOK: Output: default@source
diff --git
a/ql/src/test/results/clientpositive/llap/cmv_direct_with_suffixed_locations.q.out
b/ql/src/test/results/clientpositive/llap/cmv_direct_with_suffixed_locations.q.out
new file mode 100644
index 00000000000..9baf3f7045b
--- /dev/null
+++
b/ql/src/test/results/clientpositive/llap/cmv_direct_with_suffixed_locations.q.out
@@ -0,0 +1,307 @@
+PREHOOK: query: DROP TABLE IF EXISTS source
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS source
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: query: CREATE TABLE source STORED AS ORC
TBLPROPERTIES('transactional'='true') AS (SELECT cint, cfloat, cdouble,
cstring1, ctimestamp1 FROM alltypesorc)
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@alltypesorc
+PREHOOK: Output: database:default
+PREHOOK: Output: default@source
+POSTHOOK: query: CREATE TABLE source STORED AS ORC
TBLPROPERTIES('transactional'='true') AS (SELECT cint, cfloat, cdouble,
cstring1, ctimestamp1 FROM alltypesorc)
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@alltypesorc
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@source
+POSTHOOK: Lineage: source.cdouble SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cdouble, type:double, comment:null),
]
+POSTHOOK: Lineage: source.cfloat SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: source.cint SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: source.cstring1 SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:cstring1, type:string,
comment:null), ]
+POSTHOOK: Lineage: source.ctimestamp1 SIMPLE
[(alltypesorc)alltypesorc.FieldSchema(name:ctimestamp1, type:timestamp,
comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_orc_cmv STORED AS ORC
TBLPROPERTIES('transactional'='true') AS ((SELECT * FROM source WHERE cint >
200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_orc_cmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_orc_cmv STORED AS ORC
TBLPROPERTIES('transactional'='true') AS ((SELECT * FROM source WHERE cint >
200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_orc_cmv
+POSTHOOK: Lineage: test_orc_cmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_orc_cmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_orc_mmcmv STORED AS ORC
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_orc_mmcmv STORED AS ORC
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: Lineage: test_orc_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_orc_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_parquet_mmcmv STORED AS PARQUET
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_parquet_mmcmv STORED AS PARQUET
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: Lineage: test_parquet_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_parquet_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_avro_mmcmv STORED AS AVRO
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_avro_mmcmv STORED AS AVRO
TBLPROPERTIES('transactional'='true', 'transactional_properties'='insert_only')
AS ((SELECT * FROM source WHERE cint > 200 LIMIT 10) UNION (SELECT * FROM
source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: Lineage: test_avro_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_avro_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+Only query text based automatic rewriting is available for materialized view.
Statement has unsupported operator: union.
+PREHOOK: query: CREATE MATERIALIZED VIEW test_textfile_mmcmv STORED AS
TEXTFILE TBLPROPERTIES('transactional'='true',
'transactional_properties'='insert_only') AS ((SELECT * FROM source WHERE cint
> 200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@source
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: query: CREATE MATERIALIZED VIEW test_textfile_mmcmv STORED AS
TEXTFILE TBLPROPERTIES('transactional'='true',
'transactional_properties'='insert_only') AS ((SELECT * FROM source WHERE cint
> 200 LIMIT 10) UNION (SELECT * FROM source WHERE cint < -100 LIMIT 10))
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@source
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: Lineage: test_textfile_mmcmv.cdouble EXPRESSION
[(source)source.FieldSchema(name:cdouble, type:double, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cfloat EXPRESSION
[(source)source.FieldSchema(name:cfloat, type:float, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cint EXPRESSION
[(source)source.FieldSchema(name:cint, type:int, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.cstring1 EXPRESSION
[(source)source.FieldSchema(name:cstring1, type:string, comment:null), ]
+POSTHOOK: Lineage: test_textfile_mmcmv.ctimestamp1 EXPRESSION
[(source)source.FieldSchema(name:ctimestamp1, type:timestamp, comment:null), ]
+PREHOOK: query: SELECT * FROM test_orc_cmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_orc_cmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_orc_cmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_orc_cmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_orc_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_orc_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_orc_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_orc_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_parquet_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_parquet_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_parquet_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_parquet_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_avro_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_avro_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_avro_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_avro_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: SELECT * FROM test_textfile_mmcmv ORDER BY cint
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_textfile_mmcmv
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT * FROM test_textfile_mmcmv ORDER BY cint
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_textfile_mmcmv
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+-109813638 -51.0 NULL t32s57Cjt4a250qQgVNAB5T 1969-12-31 16:00:08.451
+-164031131 -51.0 NULL AwVW3sV2gsM 1969-12-31 16:00:08.451
+-204359131 -51.0 NULL 21UE6fJyy 1969-12-31 16:00:08.451
+-285355633 -51.0 NULL LFgU5WT87C2yJ4W4YU0r8Pp 1969-12-31 16:00:08.451
+-468112720 -51.0 NULL XWIExC7NI3bqu6VhR14g2 1969-12-31 16:00:08.451
+-497211600 -51.0 NULL m4eSLx4qihVg1e32 1969-12-31 16:00:08.451
+-552134813 -51.0 NULL 7342q5oFQL8QIl7cO 1969-12-31 16:00:08.451
+-601502867 -51.0 NULL M152O 1969-12-31 16:00:08.451
+-660174857 -51.0 NULL VkXY4IOSO 1969-12-31 16:00:08.451
+-881630661 -51.0 NULL 3e27C1jTdTQPdvCWi4if 1969-12-31 16:00:08.451
+528534767 -11.0 -15431.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:52.176
+528534767 -28.0 -15813.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:55.787
+528534767 -34.0 15007.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:50.434
+528534767 -50.0 -13326.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:46.674
+528534767 27.0 -7824.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:04.963
+528534767 29.0 7021.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:15.007
+528534767 31.0 -9566.0 cvLH6Eat2yFsyy7p 1969-12-31 15:59:44.187
+528534767 31.0 4963.0 cvLH6Eat2yFsyy7p 1969-12-31 16:00:07.021
+528534767 61.0 -15549.0 cvLH6Eat2yFsyy7p 1969-12-31
15:59:44.569
+528534767 NULL -4213.0 cvLH6Eat2yFsyy7p NULL
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_orc_cmv
+PREHOOK: Output: default@test_orc_cmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_cmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_orc_cmv
+POSTHOOK: Output: default@test_orc_cmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_orc_mmcmv
+PREHOOK: Output: default@test_orc_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_orc_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_orc_mmcmv
+POSTHOOK: Output: default@test_orc_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_parquet_mmcmv
+PREHOOK: Output: default@test_parquet_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_parquet_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_parquet_mmcmv
+POSTHOOK: Output: default@test_parquet_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_avro_mmcmv
+PREHOOK: Output: default@test_avro_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_avro_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_avro_mmcmv
+POSTHOOK: Output: default@test_avro_mmcmv
+PREHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@test_textfile_mmcmv
+PREHOOK: Output: default@test_textfile_mmcmv
+POSTHOOK: query: DROP MATERIALIZED VIEW IF EXISTS test_textfile_mmcmv
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@test_textfile_mmcmv
+POSTHOOK: Output: default@test_textfile_mmcmv
+PREHOOK: query: DROP TABLE IF EXISTS source
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@source
+PREHOOK: Output: default@source
+POSTHOOK: query: DROP TABLE IF EXISTS source
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@source
+POSTHOOK: Output: default@source
diff --git
a/ql/src/test/results/clientpositive/llap/materialized_view_create.q.out
b/ql/src/test/results/clientpositive/llap/materialized_view_create.q.out
index 7f2b51485c5..132ad39b95e 100644
--- a/ql/src/test/results/clientpositive/llap/materialized_view_create.q.out
+++ b/ql/src/test/results/clientpositive/llap/materialized_view_create.q.out
@@ -373,4 +373,4 @@ POSTHOOK: Input: default@acid_cmv_part@k=0
POSTHOOK: Input: default@acid_cmv_part@k=10
POSTHOOK: Input: default@acid_cmv_part@k=100
#### A masked pattern was here ####
-{"CBOPlan":"{\n \"rels\": [\n {\n \"id\": \"0\",\n \"relOp\":
\"org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan\",\n
\"table\": [\n \"default\",\n \"acid_cmv_part\"\n ],\n
\"table:alias\": \"acid_cmv_part\",\n \"inputs\": [],\n
\"rowCount\": 202.0,\n \"avgRowSize\": 200.0,\n \"rowType\": [\n
{\n \"type\": \"VARCHAR\",\n \"nullable\": true,\n
\"precision\": 2147483647,\n [...]
+{"CBOPlan":"{\n \"rels\": [\n {\n \"id\": \"0\",\n \"relOp\":
\"org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan\",\n
\"table\": [\n \"default\",\n \"acid_cmv_part\"\n ],\n
\"table:alias\": \"acid_cmv_part\",\n \"inputs\": [],\n
\"rowCount\": 270.0,\n \"avgRowSize\": 200.0,\n \"rowType\": [\n
{\n \"type\": \"VARCHAR\",\n \"nullable\": true,\n
\"precision\": 2147483647,\n [...]