You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2013/12/31 09:50:57 UTC
[05/10] git commit: TAJO-455: Throw PlanningException when Creating
table with Partition exception COLUMN. (DaeMyung Kang via hyunsik)
TAJO-455: Throw PlanningException when Creating table with Partition exception COLUMN. (DaeMyung Kang via hyunsik)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/2a419306
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/2a419306
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/2a419306
Branch: refs/heads/DAG-execplan
Commit: 2a419306a5b90e74b4f9653ce8a439c9e373f389
Parents: 5c243f1
Author: Hyunsik Choi <hy...@apache.org>
Authored: Sun Dec 29 22:16:12 2013 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Sun Dec 29 22:16:12 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 3 ++
.../tajo/engine/planner/LogicalPlanner.java | 29 +++++++++++---
.../engine/planner/global/GlobalPlanner.java | 17 +++-----
.../org/apache/tajo/client/TestTajoClient.java | 41 +++++++++++++++++---
4 files changed, 67 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2a419306/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ff45694..ac27e63 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -174,6 +174,9 @@ Release 0.8.0 - unreleased
BUG FIXES
+ TAJO-455: Throw PlanningException when Creating table with Partition
+ exception COLUMN. (DaeMyung Kang via hyunsik)
+
TAJO-452: Timstamp literal with fractional seconds results in
java.lang.ArrayIndexOutOfBoundsException. (Keuntae Park via hyunsik)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2a419306/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
index 55f4290..fea3361 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
@@ -781,12 +781,22 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
return storeNode;
} else {
-
Schema tableSchema;
- if (expr.hasPartition() && expr.getPartition().getPartitionType() == PartitionType.COLUMN &&
- ((ColumnPartition)expr.getPartition()).isOmitValues()) {
+ boolean mergedPartition = false;
+ if (expr.hasPartition()) {
+ if (expr.getPartition().getPartitionType().equals(PartitionType.COLUMN)) {
+ if (((ColumnPartition)expr.getPartition()).isOmitValues()) {
+ mergedPartition = true;
+ }
+ } else {
+ throw new PlanningException(String.format("Not supported PartitonType: %s",
+ expr.getPartition().getPartitionType()));
+ }
+ }
+
+ if (mergedPartition) {
ColumnDefinition [] merged = TUtil.concat(expr.getTableElements(),
- ((ColumnPartition)expr.getPartition()).getColumns());
+ ((ColumnPartition)expr.getPartition()).getColumns());
tableSchema = convertTableElementsSchema(merged);
} else {
tableSchema = convertTableElementsSchema(expr.getTableElements());
@@ -808,6 +818,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
// TODO - it should be configurable.
createTableNode.setStorageType(CatalogProtos.StoreType.CSV);
}
+
if (expr.hasParams()) {
Options options = new Options();
options.putAll(expr.getParams());
@@ -818,9 +829,15 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
createTableNode.setPath(new Path(expr.getLocation()));
}
- if (expr.hasPartition()) {
- createTableNode.setPartitions(convertTableElementsPartition(context, expr));
+ if (expr.hasPartition()) {
+ if (expr.getPartition().getPartitionType().equals(PartitionType.COLUMN)) {
+ createTableNode.setPartitions(convertTableElementsPartition(context, expr));
+ } else {
+ throw new PlanningException(String.format("Not supported PartitonType: %s",
+ expr.getPartition().getPartitionType()));
+ }
}
+
return createTableNode;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2a419306/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
index 877a179..5ab53d8 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
@@ -323,7 +323,9 @@ public class GlobalPlanner {
private ExecutionBlock buildStorePlan(GlobalPlanContext context,
ExecutionBlock childBlock,
- StoreTableNode currentNode) {
+ StoreTableNode currentNode)
+ throws PlanningException
+ {
PartitionDesc partitionDesc = currentNode.getPartitions();
// if result table is not a partitioned table, directly store it
@@ -351,17 +353,8 @@ public class GlobalPlanner {
channel.setPartitionKey(partitionDesc.getColumns().toArray(columns));
channel.setSchema(childNode.getOutSchema());
channel.setStoreType(storeType);
- } else if (partitionsType == CatalogProtos.PartitionsType.HASH) {
- channel = new DataChannel(childBlock, currentBlock, HASH_PARTITION,
- partitionDesc.getNumPartitions());
- Column[] columns = new Column[partitionDesc.getColumns().size()];
- channel.setPartitionKey(partitionDesc.getColumns().toArray(columns));
- channel.setSchema(childNode.getOutSchema());
- channel.setStoreType(storeType);
- } else if(partitionsType == CatalogProtos.PartitionsType.RANGE) {
- // TODO
- } else if(partitionsType == CatalogProtos.PartitionsType.LIST) {
- // TODO
+ } else {
+ throw new PlanningException(String.format("Not Supported PartitionsType :%s", partitionsType));
}
// 3. create a ScanNode for scanning shuffle data
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2a419306/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/client/TestTajoClient.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/client/TestTajoClient.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/client/TestTajoClient.java
index 44004d2..6e33d7c 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/client/TestTajoClient.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/client/TestTajoClient.java
@@ -250,7 +250,7 @@ public class TestTajoClient {
assertTrue(desc.getStats().getNumBytes() > 0);
}
- @Test
+ //@Test
public final void testCreateAndDropTablePartitionedHash1ByExecuteQuery() throws IOException,
ServiceException, SQLException {
TajoConf conf = cluster.getConfiguration();
@@ -274,7 +274,7 @@ public class TestTajoClient {
assertTrue(hdfs.exists(tablePath));
}
- @Test
+ //@Test
public final void testCreateAndPurgeTablePartitionedHash1ByExecuteQuery() throws IOException,
ServiceException, SQLException {
TajoConf conf = cluster.getConfiguration();
@@ -298,7 +298,7 @@ public class TestTajoClient {
assertFalse(hdfs.exists(tablePath));
}
- @Test
+ //@Test
public final void testCreateAndDropTablePartitionedHash2ByExecuteQuery() throws IOException,
ServiceException, SQLException {
TajoConf conf = cluster.getConfiguration();
@@ -322,7 +322,7 @@ public class TestTajoClient {
assertFalse(hdfs.exists(tablePath));
}
- @Test
+ //@Test
public final void testCreateAndDropTablePartitionedListByExecuteQuery() throws IOException,
ServiceException, SQLException {
TajoConf conf = cluster.getConfiguration();
@@ -347,7 +347,7 @@ public class TestTajoClient {
assertFalse(hdfs.exists(tablePath));
}
- @Test
+ //@Test
public final void testCreateAndDropTablePartitionedRangeByExecuteQuery() throws IOException,
ServiceException, SQLException {
TajoConf conf = cluster.getConfiguration();
@@ -372,6 +372,37 @@ public class TestTajoClient {
assertFalse(client.existTable(tableName));
assertFalse(hdfs.exists(tablePath));
}
+
+ @Test
+ public final void testFailCreateTablePartitionedOtherExceptColumn() throws IOException,
+ ServiceException, SQLException {
+ TajoConf conf = cluster.getConfiguration();
+ final String tableName = "testFailCreateTablePartitionedOtherExceptColumn";
+
+ assertFalse(client.existTable(tableName));
+
+ String rangeSql = "create table " + tableName + " (deptname text, score int4)";
+ rangeSql += "PARTITION BY RANGE (score)";
+ rangeSql += "( PARTITION sub_part1 VALUES LESS THAN (2),";
+ rangeSql += "PARTITION sub_part2 VALUES LESS THAN (5),";
+ rangeSql += "PARTITION sub_part2 VALUES LESS THAN (MAXVALUE) )";
+
+ assertFalse(client.updateQuery(rangeSql));
+
+ String listSql = "create table " + tableName + " (deptname text, score int4)";
+ listSql += "PARTITION BY LIST (deptname)";
+ listSql += "( PARTITION sub_part1 VALUES('r&d', 'design'),";
+ listSql += "PARTITION sub_part2 VALUES('sales', 'hr') )";
+
+ assertFalse(client.updateQuery(listSql));
+
+ String hashSql = "create table " + tableName + " (deptname text, score int4)";
+ hashSql += "PARTITION BY HASH (deptname)";
+ hashSql += "PARTITIONS 2";
+
+ assertFalse(client.updateQuery(hashSql));
+ }
+
@Test
public final void testCreateAndDropTablePartitionedColumnByExecuteQuery() throws IOException,
ServiceException, SQLException {