diff --git pom.xml pom.xml index dfb29cee4b..8614dcd1c6 100644 --- pom.xml +++ pom.xml @@ -121,7 +121,7 @@ 1.10.0 1.7.7 0.8.0.RELEASE - 1.14.0 + 1.15.0-SNAPSHOT 4.2.4 4.1.17 4.1.19 diff --git ql/src/java/org/apache/hadoop/hive/ql/metadata/HiveMaterializedViewsRegistry.java ql/src/java/org/apache/hadoop/hive/ql/metadata/HiveMaterializedViewsRegistry.java index 51b6ef58fc..03349bbc50 100644 --- ql/src/java/org/apache/hadoop/hive/ql/metadata/HiveMaterializedViewsRegistry.java +++ ql/src/java/org/apache/hadoop/hive/ql/metadata/HiveMaterializedViewsRegistry.java @@ -35,7 +35,6 @@ import org.apache.calcite.adapter.druid.DruidQuery; import org.apache.calcite.adapter.druid.DruidSchema; import org.apache.calcite.adapter.druid.DruidTable; -import org.apache.calcite.adapter.druid.LocalInterval; import org.apache.calcite.jdbc.JavaTypeFactoryImpl; import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelOptMaterialization; @@ -72,6 +71,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; +import org.joda.time.Interval; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -311,9 +311,8 @@ private static RelNode createTableScan(Table viewTable) { } metrics.add(field.getName()); } - // TODO: Default interval will be an Interval once Calcite 1.15.0 is released. - // We will need to update the type of this list. - List intervals = Arrays.asList(DruidTable.DEFAULT_INTERVAL); + + List intervals = Arrays.asList(DruidTable.DEFAULT_INTERVAL); DruidTable druidTable = new DruidTable(new DruidSchema(address, address, false), dataSource, RelDataTypeImpl.proto(rowType), metrics, DruidTable.DEFAULT_TIMESTAMP_COLUMN, diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelDistribution.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelDistribution.java index 653f1c535c..7e5beee573 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelDistribution.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelDistribution.java @@ -19,6 +19,7 @@ import java.util.List; +import org.apache.calcite.plan.RelMultipleTrait; import org.apache.calcite.plan.RelOptPlanner; import org.apache.calcite.plan.RelTrait; import org.apache.calcite.plan.RelTraitDef; @@ -26,8 +27,13 @@ import org.apache.calcite.rel.RelDistributionTraitDef; import org.apache.calcite.util.mapping.Mappings.TargetMapping; +import com.google.common.collect.Ordering; + public class HiveRelDistribution implements RelDistribution { + private static final Ordering> ORDERING = + Ordering.natural().lexicographical(); + List keys; RelDistribution.Type type; @@ -77,4 +83,21 @@ public Type getType() { return type; } + @Override + public boolean isTop() { + return type == Type.ANY; + } + + @Override + public int compareTo(RelMultipleTrait o) { + final RelDistribution distribution = (RelDistribution) o; + if (type == distribution.getType() + && (type == Type.HASH_DISTRIBUTED + || type == Type.RANGE_DISTRIBUTED)) { + return ORDERING.compare(getKeys(), distribution.getKeys()); + } + + return type.compareTo(distribution.getType()); + } + } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 23b93cd29c..64b3cad9c4 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -52,7 +52,6 @@ import org.apache.calcite.adapter.druid.DruidRules; import org.apache.calcite.adapter.druid.DruidSchema; import org.apache.calcite.adapter.druid.DruidTable; -import org.apache.calcite.adapter.druid.LocalInterval; import org.apache.calcite.config.CalciteConnectionConfig; import org.apache.calcite.config.CalciteConnectionConfigImpl; import org.apache.calcite.config.CalciteConnectionProperty; @@ -259,6 +258,7 @@ import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; +import org.joda.time.Interval; import com.google.common.base.Function; import com.google.common.collect.ArrayListMultimap; @@ -2413,9 +2413,8 @@ private RelNode genTableLogicalPlan(String tableAlias, QB qb) throws SemanticExc } metrics.add(field.getName()); } - // TODO: Default interval will be an Interval once Calcite 1.15.0 is released. - // We will need to update the type of this list. - List intervals = Arrays.asList(DruidTable.DEFAULT_INTERVAL); + + List intervals = Arrays.asList(DruidTable.DEFAULT_INTERVAL); DruidTable druidTable = new DruidTable(new DruidSchema(address, address, false), dataSource, RelDataTypeImpl.proto(rowType), metrics, DruidTable.DEFAULT_TIMESTAMP_COLUMN,