diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java index f0e4f465bc..20d09611cc 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFGetSplits.java @@ -120,7 +120,8 @@ * */ @Description(name = "get_splits", value = "_FUNC_(string,int) - " - + "Returns an array of length int serialized splits for the referenced tables string.") + + "Returns an array of length int serialized splits for the referenced tables string." + + " Passing length 0 returns only schema data for the compiled query.") @UDFType(deterministic = false) public class GenericUDTFGetSplits extends GenericUDTF { private static final Logger LOG = LoggerFactory.getLogger(GenericUDTFGetSplits.class); @@ -271,6 +272,10 @@ public PlanFragment createPlanFragment(String query, int num, ApplicationId spli } List> roots = plan.getRootTasks(); Schema schema = convertSchema(plan.getResultSchema()); + if(num == 0) { + //Schema only + return new PlanFragment(null, schema, null); + } boolean fetchTask = plan.getFetchTask() != null; TezWork tezWork; if (roots == null || roots.size() != 1 || !(roots.get(0) instanceof TezTask)) { @@ -362,6 +367,14 @@ public PlanFragment createPlanFragment(String query, int num, ApplicationId spli public InputSplit[] getSplits(JobConf job, int numSplits, TezWork work, Schema schema, ApplicationId applicationId) throws IOException { + if(numSplits == 0) { + //Schema only + LlapInputSplit schemaSplit = new LlapInputSplit( + 0, new byte[0], new byte[0], new byte[0], + new SplitLocationInfo[0], schema, "", new byte[0]); + return new InputSplit[] { schemaSplit }; + } + DAG dag = DAG.create(work.getName()); dag.setCredentials(job.getCredentials());