从文件中稳健地读取SQL

时间:2019-04-30 11:32:53

标签: scala apache-spark

我需要从Spark的Postgres数据库获取一些数据。因为SQL查询很大(接近300行),所以我想从sql文件中读取查询,而不是在Scala源代码中对其进行硬编码。

但是,我无法以保留语法的方式正确读取sql文件。我可以在DBeaver中很好地运行查询,但是Scala会抛出org.postgresql.util.PSQLException。典型的堆栈跟踪将指向SQL文件中看似随机的位置,但不提供任何提示。

我正在读取这样的SQL文件:

val query = sc.textfile("someQuery.sql").collect().mkString("\n")

哪个给出的字符串看起来像原始的sql查询。然后我运行时将抛出Postgres异常

spark.read.jdbc(DBUrl, query, connectionProperties)

修改

稍作修改后,给定here的解决方案对我有用。

可能需要关注的一些笔记:

  • 始终为查询添加别名,即。不是“从tbl选择*”,而是“(从tbl选择*)tmp”;
  • 使用SparkSession代替从SparkContext创建SQLContext;

此代码段最终为我工作:

val df = spark
.read.format("jdbc")
.options(
  Map("url" -> jdbcUrl,
      "dbtable" -> aliased_query,
      "Driver" -> "org.postgresql.Driver",
      "user" -> <user>,
      "password" -> <password>)
).load()

(我知道,请不要对密码进行硬编码。)

0 个答案:

没有答案