Как собрать статистику просмотра в Spark SQL? - PullRequest
0 голосов
/ 13 июля 2020

Версия Spark: 3.0.0

Вот несколько кодов:

val df = spark.read.schema(schema).format("com.databricks.spark.csv")
    .option(...)
    .load(tablePath)
df.createOrReplaceTempView("t1")

// suppose we have create views "t2" and "t3".
val res = spark.sql("select * from t1, t2, t3 where t1.a = t2.a and t2.b = t3.b")

Я использую Spark SQL для создания представления путем чтения файлов CSV. И я хочу настроить производительность sql, собирая статистику таблицы, которая может помочь оптимизатору сгенерировать лучший план выполнения.

Я нашел документ о синтаксисе Analyze TABLE. Но мои t1, t2 и t3 являются представлениями вместо таблиц, поэтому я не могу использовать Analyze Table t1 ....

Вот мой вопрос: как собрать статистику VIEW в Spark SQL в помощь CBO?

1 Ответ

0 голосов
/ 13 июля 2020

Возможно, это пригодится -

  val df = spark.range(10)
    df.createOrReplaceTempView("myView")
    spark.sql("explain cost select * from myView").show(false)

    /**
      * +------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
      * |plan                                                                                                                                                                    |
      * +------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
      * |== Optimized Logical Plan ==
      * Range (0, 10, step=1, splits=Some(2)), Statistics(sizeInBytes=80.0 B, hints=none)
      *
      * == Physical Plan ==
      * *(1) Range (0, 10, step=1, splits=2)|
      * +------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
      */

println(spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats.sizeInBytes) // 80
...