DRILL-1390: Hive query against an ES data source fails
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/fab68158 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/fab68158 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/fab68158 Branch: refs/heads/master Commit: fab6815899b32271f29e2541c8f414a207b15282 Parents: e4e22f7 Author: Aditya Kishore <adi...@maprtech.com> Authored: Wed Sep 10 13:49:26 2014 -0700 Committer: Aditya Kishore <adi...@maprtech.com> Committed: Thu Sep 11 19:25:27 2014 -0700 ---------------------------------------------------------------------- .../org/apache/drill/exec/store/hive/HiveScan.java | 2 +- .../org/apache/drill/exec/store/hive/HiveSubScan.java | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/fab68158/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveScan.java ---------------------------------------------------------------------- diff --git a/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveScan.java b/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveScan.java index d050467..c9569f9 100644 --- a/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveScan.java +++ b/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveScan.java @@ -216,7 +216,7 @@ public class HiveScan extends AbstractGroupScan { for (InputSplit split : splits) { parts.add(new HiveTable.HivePartition(partitionMap.get(split))); encodedInputSplits.add(serializeInputSplit(split)); - splitTypes.add(split.getClass().getCanonicalName()); + splitTypes.add(split.getClass().getName()); } if (parts.contains(null)) parts = null; HiveReadEntry subEntry = new HiveReadEntry(hiveReadEntry.table, parts, hiveReadEntry.hiveConfigOverride); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/fab68158/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveSubScan.java ---------------------------------------------------------------------- diff --git a/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveSubScan.java b/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveSubScan.java index c0e479a..1233202 100644 --- a/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveSubScan.java +++ b/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveSubScan.java @@ -18,6 +18,7 @@ package org.apache.drill.exec.store.hive; import java.io.IOException; +import java.lang.reflect.Constructor; import java.util.Iterator; import java.util.List; @@ -29,10 +30,8 @@ import org.apache.drill.exec.physical.base.PhysicalOperator; import org.apache.drill.exec.physical.base.PhysicalVisitor; import org.apache.drill.exec.physical.base.SubScan; import org.apache.drill.exec.proto.UserBitShared.CoreOperatorType; -import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.metastore.api.Partition; import org.apache.hadoop.hive.metastore.api.Table; -import org.apache.hadoop.mapred.FileSplit; import org.apache.hadoop.mapred.InputSplit; import com.fasterxml.jackson.annotation.JsonCreator; @@ -108,12 +107,12 @@ public class HiveSubScan extends AbstractBase implements SubScan { } public static InputSplit deserializeInputSplit(String base64, String className) throws IOException, ReflectiveOperationException{ - InputSplit split; - if (Class.forName(className) == FileSplit.class) { - split = new FileSplit((Path) null, 0, 0, (String[])null); - } else { - split = (InputSplit) Class.forName(className).getConstructor().newInstance(); + Constructor<?> constructor = Class.forName(className).getDeclaredConstructor(); + if (constructor == null) { + throw new ReflectiveOperationException("Class " + className + " does not implement a default constructor."); } + constructor.setAccessible(true); + InputSplit split = (InputSplit) constructor.newInstance(); ByteArrayDataInput byteArrayDataInput = ByteStreams.newDataInput(Base64.decodeBase64(base64)); split.readFields(byteArrayDataInput); return split;