All Downloads are FREE. Search and download functionalities are using the official Maven repository.

shark.server.SharkSQLOperation.scala Maven / Gradle / Ivy

The newest version!
package shark.server

import java.util.{Map => JMap}
import org.apache.hadoop.hive.ql.parse.VariableSubstitution
import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse
import org.apache.hive.service.cli.{HiveSQLException, OperationState, TableSchema}
import org.apache.hive.service.cli.operation.SQLOperation
import org.apache.hive.service.cli.session.HiveSession
import shark.{SharkDriver, Utils}

class SharkSQLOperation(
    parentSession: HiveSession,
    statement: String,
    confOverlay: JMap[String, String])
  extends SQLOperation(parentSession, statement, confOverlay) {

  private val sdriver = {
    val d = new SharkDriver(getParentSession.getHiveConf)
    d.init()
    d
  }

  override def run() {
    setState(OperationState.RUNNING)
    Utils.setSuperField("driver", sdriver, this)
    var response: Option[CommandProcessorResponse] = None
    sdriver.setTryCount(Integer.MAX_VALUE) //maybe useless?
    var subStatement = ""
    try {
      //duplicate: this is also done when Driver compiles command
      subStatement = new VariableSubstitution().substitute(getParentSession.getHiveConf, statement)
    } catch {
      case e: IllegalStateException => {
        setState(OperationState.ERROR)
        throw new HiveSQLException
      }
    }

    response = Option(sdriver.run(subStatement))
    response match {
      case Some(resp: CommandProcessorResponse) => {
        val code = resp.getResponseCode
        if (code != 0) {
          setState(OperationState.ERROR)
          throw new HiveSQLException("Error while processing statement: "
            + resp.getErrorMessage, resp.getSQLState, code)
        }
      }
      case None => {
        setState(OperationState.ERROR)
        throw new HiveSQLException
      }
    }

    val mResultSchema = sdriver.getSchema
    Utils.setSuperField("mResultSchema", mResultSchema, this)
    if (mResultSchema != null && mResultSchema.isSetFieldSchemas) {
      val resultSchema = new TableSchema(mResultSchema)
      Utils.setSuperField("resultSchema", resultSchema, this)
      setHasResultSet(true)
    } else {
      setHasResultSet(false)
    }
    setState(OperationState.FINISHED)
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy