Scala sparksql中的update语句

Scala sparksql中的update语句,scala,apache-spark-sql,Scala,Apache Spark Sql,有没有一种方法可以使用spark sql(使用scala语言)在sql server表上执行update语句 我需要执行以下查询: update MyLog_table set Log_FileQueue = xx, Log_TotalLine = xx where Log_ID = xxx 我尝试了以下语法: val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbc

有没有一种方法可以使用spark sql(使用scala语言)在sql server表上执行update语句

我需要执行以下查询:

update  MyLog_table
set     Log_FileQueue = xx,
        Log_TotalLine = xx
where   Log_ID = xxx
我尝试了以下语法:

 val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase}"
    val Log_FileIn = spark.read.jdbc(jdbcUrl, s"(select Log_FileIn from log Where   Log_ID = '${Process1Log_ID}' ) as sq", connectionProperties)
    val newLog_FileIn = Log_FileIn.collectAsList().toString().replace("[", "").replace("]", "")

 spark.sql(s"(select '${newLog_FileIn}' as Log_FileQueue, ${NbLine} as Log_TotalLine where Log_ID = '${newLog_id}')")
  .write
  .mode(SaveMode.Append)
  .jdbc(jdbcUrl, "Log", connectionProperties)
但它会产生以下错误:

org.apache.spark.sql.AnalysisException: cannot resolve '`Log_ID`' given input columns: []; line 1 pos 115;
'Project [test_141001.csv AS Log_FileQueue#290, 5 AS Log_TotalLine#29
我还尝试使用“where”方法:

但它也不起作用。我得到以下错误:

org.apache.spark.sql.AnalysisException: cannot resolve '`Log_ID`' given input columns: [Log_FileQueue, Log_TotalLine]; line 1 pos 0;
'Filter ('Log_ID = 157456)
+- AnalysisBarrier
      +- Project [ANNONCE-FNAC-VIGICOLIS-GRX-BIZ-2018hfgr071eyzdtrf2_141001.csv AS Log_FileQueue#290, 5 AS Log_TotalLine#291]

任何帮助都会被感激,不是它如何工作。试试executeBatch。

不是它如何工作。试试executeBatch。

谢谢BluePhantom;我找到了一个解决方案:import com.microsoft.azure.sqldb.spark.config.config import com.microsoft.azure.sqldb.spark.query.val query=s“”。|更新日志| SET Log_FileQueue='${newLog_FileIn}',Log_totaline=${NbLine}|其中Log_ID=157457;'.stripMargin val config=config(映射(“url”->“localhost”,“databaseName”->jdbcDatabase,“用户”->jdbcUsername,“密码”->jdbcPassword,“queryCustom”->query))sqlContext.sqlDBQuery(配置)这是一种AZURE方法吗?是的。这是一种与AZURE DB或MSSQL DB交互的方法,我很想知道,以备将来参考。我在SPARK sense中给出的答案也是正确的。感谢BluePhantom;我找到了一个解决方案:导入com.microsoft.AZURE.sqldb.SPARK.config导入com.microsoft.AZURE.sqldb.SPARK.query。val query=s“”“|更新日志|设置日志|文件队列=”${newLog | FileIn}',日志|总计=${NbLine}|其中日志ID=157457;“”“.stripMargin val config=config(映射(“url”->“本地主机”,“数据库名”->jdbcDatabase,“用户”->jdbcUsername”,“密码”->jdbcPassword),“queryCustom”->query)sqlContext.sqlDBQuery(config)这是一种AZURE方法吗?是的。这是一种与AZURE DB或MSSQL数据库交互的方法,我很想知道,以供将来参考。我在SPARK意义上给出的答案也是正确的。
org.apache.spark.sql.AnalysisException: cannot resolve '`Log_ID`' given input columns: [Log_FileQueue, Log_TotalLine]; line 1 pos 0;
'Filter ('Log_ID = 157456)
+- AnalysisBarrier
      +- Project [ANNONCE-FNAC-VIGICOLIS-GRX-BIZ-2018hfgr071eyzdtrf2_141001.csv AS Log_FileQueue#290, 5 AS Log_TotalLine#291]