Что такое узел SubqueryAlias ​​в анализируемом логическом плане? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть простой 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")
    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))

Почему SubqueryAlias ​​отображается в логическом плане?В моем sql у меня нет операций, связанных с псевдонимами.

Может кто-нибудь помочь объяснить?Спасибо!

1 Ответ

0 голосов
/ 04 июня 2018

SubqueryAlias ​​ - это унарный логический оператор , который дает псевдоним для (дочернего) подзапроса, для которого он был создан.Псевдоним можно использовать в другой части структурированного запроса для коррелированного подзапроса.

SubqueryAlias (и псевдонимы в целом) доступны до тех пор, пока Spark Optimizer не завершит фазу оптимизации запросов (используя EliminateSubqueryAliases правило оптимизации).

Цитирование EliminateSubqueryAliases оптимизация:

Подзапросы требуются только для предоставления информации об области видимости для атрибутов и могут быть удалены после завершения анализа.

В вашем запросе подзапрос является частью до createOrReplaceTempView("t1").

spark.range(1, 100).createOrReplaceTempView("t1")

Вы можете переписать приведенный выше структурированный запрос в следующий, который ничего не изменит, но даст более сложныйобъяснение.

val q = spark.range(1, 100)
q.createOrReplaceTempView("t1")

Итак, q может быть любым другим структурированным запросом и, следовательно, необходим псевдоним для ссылки на любой выходной атрибут из подзапроса.


Когда вы explain запрос, который вы не увидите SubqueryAlias узлов (и это не только потому, что план логического запроса запланирован наплан физического запроса, в котором используются физические операторы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...