Github user OopsOutOfMemory commented on a diff in the pull request:
https://github.com/apache/spark/pull/3935#discussion_r22637899
--- Diff:
sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala ---
@@ -326,4 +327,17 @@ private[sql] abstract class SparkStrategies extends
QueryPlanner[SparkPlan] {
case _ => Nil
}
}
+
+ case class DDLStrategy(context: SQLContext) extends Strategy {
+ def apply(plan: LogicalPlan): Seq[SparkPlan] = plan match {
+ case describe: logical.DescribeCommand =>
+ val resolvedTable = context.executePlan(describe.table).analyzed
+ resolvedTable match {
+ case LogicalRelation(relation) =>
+ Seq(ExecutedCommand(DDLDescribeCommand(relation,
describe.output, describe.isExtended)))
+ case o: logical.DescribeCommand =>
+ ExecutedCommand(DescribeCommand(planLater(o),
describe.output)) :: Nil
--- End diff --
@scwf Thanks for the suggestion : )
I think in the implementation level, both are ok.
And In my point of view, the `RunnableCommand` is a command with a simple
`action` that gernarlly `without side-effect`, like `add jar`, `add file`,
`drop table`. You can refer `hive.execution.commands.scala`.
Why here I add a strategy is to handle the side-effect is Because the sql
behavior of external datasource is not like common sql. Maybe it will cause
side-effect. And use two level abstractions is more extendable I think.
You can look deep into `CommandStrategy`, the `cache command`, `explain
command` is also two level abstraction.
What do you think? @chenghao-intel
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]