存储为字符串变量时如何执行spark sql多行查询?

Posted

技术标签:

【中文标题】存储为字符串变量时如何执行spark sql多行查询?【英文标题】:How to execute spark sql multiline query when stored as a string variable? 【发布时间】:2018-05-22 21:41:11 【问题描述】:

我有这样的多行查询代码

  val hiveInsertIntoTable = spark.read.text(fileQuery).collect()
  hiveInsertIntoTable.foreach(println)

  val actualQuery = hiveInsertIntoTable(0).mkString
  println(actualQuery)


  spark.sql(s"truncate table $tableTruncate")
  spark.sql(actualQuery)

每当我尝试执行实际查询时,都会出现错误。

org.apache.spark.sql.catalyst.parser.ParseException:
no viable alternative at input '<EOF>'(line 1, pos 52)
== SQL ==
insert into wera_tacotv_esd.lac_asset_table_pb_hive

----------------------------------------------- -----^^^

and the end of the query  .... ;    (terminates in a ;)

查询实际上是450行左右

我尝试将变量用三引号括起来,但这也没有用。

感谢任何帮助。

我正在使用 spark 2.1 和 scala 2.11

【问题讨论】:

我们需要看到这个查询...至少它的前 53 个字符... 你是对的 ronhash 错误是当前分析器和我有一个事实的组合;在查询结束时 【参考方案1】:

三个问题:

hiveInsertIntoTableArray[org.apache.spark.sql.Row] - 不是很有用的结构。 你只取第一行hiveInsertIntoTable(0) 即使您获取所有行,与空字符串 (.mkString) 连接也无法正常工作。

要么:

val actualQuery = spark.read.text(path).as[String].collect.mkString("\n")

val actualQuery = spark.sparkContext.wholeTextFiles(path).values.first()

【讨论】:

以上是关于存储为字符串变量时如何执行spark sql多行查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pl/sql 函数中的变量中存储多行?

开发中遇到的问题---使用mybatis时 有一个sql查询不到结果 日志也显示查询为o 但是从日志中取出执行的sql到数据库客户端手动执行,可以查到数据

sql 如何将查出来的一列用逗号拼接

如何将多行语句字符串放入变量中? [复制]

如何在 Spark SQL 表达式中使用字符串变量?

SQL 将值拆分为多行