org.apache.spark.sql.catalyst.parser.ParserInterface Scala Examples
The following examples show how to use org.apache.spark.sql.catalyst.parser.ParserInterface.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: SparkExtension.scala From spark-atlas-connector with Apache License 2.0 | 5 votes |
package com.hortonworks.spark.atlas.sql import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.parser.ParserInterface import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.types.{DataType, StructType} import org.apache.spark.sql.{SparkSession, SparkSessionExtensions} class SparkExtension extends (SparkSessionExtensions => Unit) { def apply(e: SparkSessionExtensions): Unit = { e.injectParser(SparkAtlasConnectorParser) } } case class SparkAtlasConnectorParser(spark: SparkSession, delegate: ParserInterface) extends ParserInterface { override def parsePlan(sqlText: String): LogicalPlan = { SQLQuery.set(sqlText) delegate.parsePlan(sqlText) } override def parseExpression(sqlText: String): Expression = delegate.parseExpression(sqlText) override def parseTableIdentifier(sqlText: String): TableIdentifier = delegate.parseTableIdentifier(sqlText) override def parseFunctionIdentifier(sqlText: String): FunctionIdentifier = delegate.parseFunctionIdentifier(sqlText) override def parseTableSchema(sqlText: String): StructType = delegate.parseTableSchema(sqlText) override def parseDataType(sqlText: String): DataType = delegate.parseDataType(sqlText) } object SQLQuery { private[this] val sqlQuery = new ThreadLocal[String] def get(): String = sqlQuery.get def set(s: String): Unit = sqlQuery.set(s) }
Example 2
Source File: CarbonExtensions.scala From carbondata with Apache License 2.0 | 5 votes |
package org.apache.spark.sql import org.apache.spark.sql.catalyst.parser.ParserInterface import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.execution.strategy.{CarbonLateDecodeStrategy, DDLStrategy, StreamingTableStrategy} import org.apache.spark.sql.hive.{CarbonIUDAnalysisRule, CarbonPreInsertionCasts} import org.apache.spark.sql.parser.CarbonExtensionSqlParser class CarbonExtensions extends (SparkSessionExtensions => Unit) { override def apply(extensions: SparkSessionExtensions): Unit = { // Carbon internal parser extensions .injectParser((sparkSession: SparkSession, parser: ParserInterface) => new CarbonExtensionSqlParser(new SQLConf, sparkSession, parser)) // carbon analyzer rules extensions .injectResolutionRule((session: SparkSession) => CarbonIUDAnalysisRule(session)) extensions .injectResolutionRule((session: SparkSession) => CarbonPreInsertionCasts(session)) // carbon optimizer rules extensions.injectPostHocResolutionRule((session: SparkSession) => CarbonOptimizerRule(session)) // carbon planner strategies extensions .injectPlannerStrategy((session: SparkSession) => new StreamingTableStrategy(session)) extensions .injectPlannerStrategy((_: SparkSession) => new CarbonLateDecodeStrategy) extensions .injectPlannerStrategy((session: SparkSession) => new DDLStrategy(session)) // init CarbonEnv CarbonEnv.init() } } case class CarbonOptimizerRule(session: SparkSession) extends Rule[LogicalPlan] { self => var notAdded = true override def apply(plan: LogicalPlan): LogicalPlan = { if (notAdded) { self.synchronized { if (notAdded) { notAdded = false val sessionState = session.sessionState val field = sessionState.getClass.getDeclaredField("optimizer") field.setAccessible(true) field.set(sessionState, new CarbonOptimizer(session, sessionState.catalog, sessionState.optimizer)) } } } plan } }
Example 3
Source File: CarbonExtensionSqlParser.scala From carbondata with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.parser import org.apache.spark.sql.{CarbonEnv, CarbonUtils, SparkSession} import org.apache.spark.sql.catalyst.parser.ParserInterface import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.execution.SparkSqlParser import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.util.CarbonException import org.apache.carbondata.common.exceptions.sql.MalformedCarbonCommandException import org.apache.carbondata.spark.util.CarbonScalaUtil class CarbonExtensionSqlParser( conf: SQLConf, sparkSession: SparkSession, initialParser: ParserInterface ) extends SparkSqlParser(conf) { val parser = new CarbonExtensionSpark2SqlParser override def parsePlan(sqlText: String): LogicalPlan = { parser.synchronized { CarbonEnv.getInstance(sparkSession) } CarbonUtils.updateSessionInfoToCurrentThread(sparkSession) try { val plan = parser.parse(sqlText) plan } catch { case ce: MalformedCarbonCommandException => throw ce case ex: Throwable => try { val parsedPlan = initialParser.parsePlan(sqlText) CarbonScalaUtil.cleanParserThreadLocals parsedPlan } catch { case mce: MalformedCarbonCommandException => throw mce case e: Throwable => e.printStackTrace(System.err) CarbonScalaUtil.cleanParserThreadLocals CarbonException.analysisException( s"""== Parser1: ${parser.getClass.getName} == |${ex.getMessage} |== Parser2: ${initialParser.getClass.getName} == |${e.getMessage} """.stripMargin.trim) } } } }