Apache spark 分析的逻辑计划中的SubqueryAlias节点是什么?
我有一个简单的sql,如下所示Apache spark 分析的逻辑计划中的SubqueryAlias节点是什么?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个简单的sql,如下所示 test("SparkSQLTest") { val spark = SparkSession.builder().master("local").appName("SparkSQLTest").getOrCreate() spark.range(1, 100).createOrReplaceTempView("t1") val df = spark.sql("select id from t1 where t1.id = 10")
test("SparkSQLTest") {
val spark = SparkSession.builder().master("local").appName("SparkSQLTest").getOrCreate()
spark.range(1, 100).createOrReplaceTempView("t1")
val df = spark.sql("select id from t1 where t1.id = 10")
df.explain(true)
}
分析的逻辑计划的输出为:
== Analyzed Logical Plan ==
id: bigint
Project [id#0L]
+- Filter (id#0L = cast(10 as bigint))
+- SubqueryAlias t1 ////don't understand here
+- Range (1, 100, step=1, splits=Some(1))
为什么子QueryAlias出现在逻辑计划中?在我的sql中,没有与别名相关的操作
有人能解释一下吗?谢谢 是一元逻辑运算符,它为创建子查询的子查询提供别名。别名可用于相关子查询的结构化查询的另一部分
在Spark Optimizer使用优化规则完成查询优化阶段之前,子QueryAlias和别名通常是可用的
报价优化:
子查询只需要提供属性的范围信息,并且可以在分析完成后删除
在查询中,子查询是createOrReplaceTempViewt1之前的部分
您可以将上面的结构化查询重写为以下内容,这不会改变任何内容,但会给出更详细的解释
val q = spark.range(1, 100)
q.createOrReplaceTempView("t1")
因此,q可以是任何其他结构化查询,因此需要一个别名来引用子查询中的任何输出属性
解释查询时,您不会看到任何子QueryAlias节点,这不仅是因为逻辑查询计划被规划为使用物理运算符的物理查询计划。您创建了一个临时视图。createOrReplaceTempViewt1和别名Thank@RameshMaharjan。我想问你,alias用于什么?你创建的数据集的alias
val q = spark.range(1, 100)
q.createOrReplaceTempView("t1")