如何在带有参数的spark中执行hql文件

Posted

技术标签:

【中文标题】如何在带有参数的spark中执行hql文件【英文标题】:How to execute hql file in spark with arguments 【发布时间】:2019-07-16 22:41:16 【问题描述】:

我有一个接受多个参数的 hql 文件,然后我在独立的 spark 应用程序中调用这个 hql 脚本来创建一个数据帧。

这是我脚本中的示例 hql 代码:

select id , name, age, country , created_date
from $db1.$table1 a 
inner join $db2.$table2 b
on a.id = b.id

这就是我在 Spark 脚本中的调用方式:

import scala.io.Source
val queryFile = `path/to/my/file`
val db1 = 'cust_db'
val db2 = 'cust_db2'
val table1 = 'customer'
val table2 = 'products'
val query = Source.fromFile(queryFile).mkString
val df = spark.sql(query)

当我使用这种方式时,我得到: org.apache.spark.sql.catylyst.parser.ParserException

有没有办法将参数直接传递给我的 hql 文件,然后从 hive 代码中创建一个 df。

【问题讨论】:

【参考方案1】:

参数可以用这样的代码注入:

val parametersMap = Map("db1" -> db1, "db2" -> db2, "table1" -> table1, "table2" -> table2)
val injectedQuery = parametersMap.foldLeft(query)((acc, cur) => acc.replace("$" + cur._1 + "", cur._2))

【讨论】:

以上是关于如何在带有参数的spark中执行hql文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hive 仓库连接器在 pyspark 中执行 HQL 文件

从 spark 直接调用 .hql 文件

如何在带有 Oracle 数据库的 HQL 查询中使用当前日期?

在 ( ... ) 查询中编写 HQL 的正确方法

如何从 java 执行 Hive hql 文件?

如何在 Hibernate 中执行非多态 HQL 查询?