diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index 88a7cfc70e..b2fc6ccb82 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -4145,6 +4145,9 @@ private static void populateLlapDaemonVarsSet(Set llapDaemonVarsSetLocal LLAP_DAEMON_OUTPUT_SERVICE_MAX_PENDING_WRITES("hive.llap.daemon.output.service.max.pending.writes", 8, "Maximum number of queued writes allowed per connection when sending data\n" + " via the LLAP output service to external clients."), + LLAP_EXTERNAL_SPLITS_TEMP_TABLE_STORAGE_FORMAT("hive.llap.external.splits.temp.table.storage.format", + "orc", new StringSet("default", "text", "orc"), + "Storage format for temp tables created using LLAP external client"), LLAP_ENABLE_GRACE_JOIN_IN_LLAP("hive.llap.enable.grace.join.in.llap", false, "Override if grace join should be allowed to run in llap."), diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniLlap.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniLlap.java index 68a8e21307..7e35fefedb 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniLlap.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniLlap.java @@ -439,6 +439,19 @@ public void testDataTypes() throws Exception { assertArrayEquals("X'01FF'".getBytes("UTF-8"), (byte[]) rowValues[22]); } + + @Test(timeout = 60000) + public void testComplexQuery() throws Exception { + createTestTable("testtab1"); + + RowCollector rowCollector = new RowCollector(); + String query = "select value, count(*) from testtab1 where under_col=0 group by value"; + int rowCount = processQuery(query, 1, rowCollector); + assertEquals(1, rowCount); + + assertArrayEquals(new String[] {"val_0", "3"}, rowCollector.rows.get(0)); + } + private interface RowProcessor { void process(Row row); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java index cae02a9431..e74a18853c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java @@ -268,7 +268,8 @@ public PlanFragment createPlanFragment(String query, int num, ApplicationId spli String tableName = "table_"+UUID.randomUUID().toString().replaceAll("[^A-Za-z0-9 ]", ""); - String ctas = "create temporary table " + tableName + " as " + query; + String storageFormatString = getTempTableStorageFormatString(conf); + String ctas = "create temporary table " + tableName + " " + storageFormatString + " as " + query; LOG.info("Materializing the query for LLAPIF; CTAS: " + ctas); driver.releaseResources(); HiveConf.setVar(conf, ConfVars.HIVE_EXECUTION_MODE, originalMode); @@ -641,6 +642,18 @@ private Schema convertSchema(Object obj) throws HiveException { return Schema; } + private String getTempTableStorageFormatString(HiveConf conf) { + String formatString = ""; + String storageFormatOption = + conf.getVar(HiveConf.ConfVars.LLAP_EXTERNAL_SPLITS_TEMP_TABLE_STORAGE_FORMAT).toLowerCase(); + if (storageFormatOption.equals("text")) { + formatString = "stored as textfile"; + } else if (storageFormatOption.equals("orc")) { + formatString = "stored as orc"; + } + return formatString; + } + @Override public void close() throws HiveException { }