package com.astraldb.catalyst import org.apache.spark.sql.{ Row, SparkSession } import org.apache.spark.sql.types._ import org.apache.spark.sql.functions._ object OptimizerTest { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.builder .appName("OptimizerTest") .master("local") .getOrCreate() spark.sparkContext.setLogLevel("ERROR") val r = spark.emptyDataFrame .select(lit(1) as "A", lit(2) as "B") r.createOrReplaceTempView("R") val df = spark.sql("SELECT * FROM R") val analyzed = df.queryExecution.analyzed println(df.queryExecution.logical) println(analyzed) println("------------------") val optimized = Time("Astral Optimizer") { Optimizer.rewrite(analyzed) } println("------------------\nAstral-Naive Optimized Query:\n") println(optimized) println("------------------") val bddOptimized = Time("BDD Optimizer") { LogicalPlanBDDOptimizer.rewrite(analyzed) } println("------------------\nAstral-BDD Optimized Query:\n") println(optimized) println("------------------") val sparkOptimized = Time("Spark Optimizer") { df.queryExecution.optimizedPlan } println("------------------\nSpark Optimized Query:\n") println(sparkOptimized) println("------------------") } }