blob: 0025a64e33aa0762612f9a66703986ad5df02f84 [file] [log] [blame]
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
index 21f8268..949a9e8 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
@@ -224,7 +224,9 @@ public void closeWriters(boolean abort) throws HiveException {
private void commit(FileSystem fs, List<Path> commitPaths) throws HiveException {
for (int idx = 0; idx < outPaths.length; ++idx) {
try {
- commitOneOutPath(idx, fs, commitPaths);
+ if (outPaths[idx] != null) {
+ commitOneOutPath(idx, fs, commitPaths);
+ }
} catch (IOException e) {
throw new HiveException("Unable to commit output from: " +
outPaths[idx] + " to: " + finalPaths[idx], e);
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java
index cf68d32..bbe9d5a 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java
@@ -184,6 +184,47 @@ public void testNoBuckets() throws Exception {
assertExpectedFileSet(expectedFiles, getWarehouseDir() + "/nobuckets");
}
+ @Test
+ public void testNoBucketsDP() throws Exception {
+ hiveConf.setVar(HiveConf.ConfVars.DYNAMICPARTITIONINGMODE, "nonstrict");
+ int[][] sourceVals1 = {{0,0,0},{3,3,3}};
+ int[][] sourceVals2 = {{1,1,1},{2,2,2}};
+ int[][] sourceVals3 = {{3,3,3},{4,4,4}};
+ int[][] sourceVals4 = {{5,5,5},{6,6,6}};
+ runStatementOnDriver("drop table if exists tmp");
+ runStatementOnDriver("create table tmp (c1 integer, c2 integer) partitioned by (c3 integer) stored as orc " +
+ "tblproperties('transactional'='false')");
+ runStatementOnDriver("insert into tmp " + makeValuesClause(sourceVals1));
+ runStatementOnDriver("insert into tmp " + makeValuesClause(sourceVals2));
+ runStatementOnDriver("insert into tmp " + makeValuesClause(sourceVals3));
+ runStatementOnDriver("insert into tmp " + makeValuesClause(sourceVals4));
+ runStatementOnDriver("drop table if exists nobuckets");
+ runStatementOnDriver("create table nobuckets (c1 integer, c2 integer) partitioned by (c3 integer) stored " +
+ "as orc tblproperties('transactional'='true', 'transactional_properties'='default')");
+ String stmt = "insert into nobuckets partition(c3) select * from tmp";
+ runStatementOnDriver(stmt);
+ List<String> rs = runStatementOnDriver(
+ "select ROW__ID, c1, c2, c3, INPUT__FILE__NAME from nobuckets order by ROW__ID");
+ Assert.assertEquals("", 8, rs.size());
+ LOG.warn("after insert");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+
+ rs = runStatementOnDriver(
+ "select * from nobuckets where c2 in (0,3)");
+ Assert.assertEquals(3, rs.size());
+ runStatementOnDriver("update nobuckets set c2 = 17 where c2 in(0,3)");
+ rs = runStatementOnDriver("select ROW__ID, c1, c2, c3, INPUT__FILE__NAME from nobuckets order by INPUT__FILE__NAME, ROW__ID");
+ LOG.warn("after update");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+ rs = runStatementOnDriver(
+ "select * from nobuckets where c2=17");
+ Assert.assertEquals(3, rs.size());
+ }
+
/**
* See CTAS tests in TestAcidOnTez
*/