存储为字符串变量时如何执行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】:三个问题:
hiveInsertIntoTable
是 Array[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多行查询?的主要内容,如果未能解决你的问题,请参考以下文章
开发中遇到的问题---使用mybatis时 有一个sql查询不到结果 日志也显示查询为o 但是从日志中取出执行的sql到数据库客户端手动执行,可以查到数据