diff --git a/presto-main/src/main/java/com/facebook/presto/operator/ExplainAnalyzeOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/ExplainAnalyzeOperator.java index 956d64b58b924..690662ab7880c 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/ExplainAnalyzeOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/ExplainAnalyzeOperator.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableList; import java.util.List; +import java.util.StringJoiner; import java.util.concurrent.TimeUnit; import static com.facebook.presto.common.type.VarcharType.VARCHAR; @@ -149,7 +150,6 @@ public Page getOutput() QueryInfo queryInfo = queryPerformanceFetcher.getQueryInfo(operatorContext.getDriverContext().getTaskId().getQueryId()); checkState(queryInfo.getOutputStage().isPresent(), "Output stage is missing"); - checkState(queryInfo.getOutputStage().get().getSubStages().size() == 1, "Expected one sub stage of explain node"); if (!hasFinalStageInfo(queryInfo.getOutputStage().get())) { return null; @@ -157,10 +157,21 @@ public Page getOutput() String plan; switch (format) { case TEXT: - plan = textDistributedPlan(queryInfo.getOutputStage().get().getSubStages().get(0), functionAndTypeManager, operatorContext.getSession(), verbose); + StringBuilder planStringBuilder = new StringBuilder(); + for (StageInfo stageInfo : queryInfo.getOutputStage().get().getSubStages()) { + planStringBuilder.append("Stage ID: ").append(stageInfo.getStageId().toString()).append('\n') + .append(textDistributedPlan(stageInfo, functionAndTypeManager, operatorContext.getSession(), + verbose)); + } + plan = planStringBuilder.toString(); break; case JSON: - plan = jsonDistributedPlan(queryInfo.getOutputStage().get().getSubStages().get(0), functionAndTypeManager, operatorContext.getSession()); + StringJoiner planStringJoiner = new StringJoiner(",", "[", "]"); + for (StageInfo stageInfo : queryInfo.getOutputStage().get().getSubStages()) { + planStringJoiner.add(jsonDistributedPlan(stageInfo, functionAndTypeManager, + operatorContext.getSession())); + } + plan = planStringJoiner.toString(); break; default: throw new PrestoException(GENERIC_INTERNAL_ERROR, "Explain format not supported: " + format);