这是一个非常小的技巧, 但是应该还是有点用。
ss.sql("select * from xxxx")
这种直接写的方式当然是非常简单,
但是如果SQL很复杂的话,
那么就不太好控制了,
可读性也非常差image.png
image.png
image.png
image.png
image.png
image.png
|
,所以会有报错
image.png
|
吧,最终效果就这样了
image.png
好了上面这些技巧你掌握了吗? 那么还有没有更好的想法呢? 如果我们可以写一个SQL文件直接执行这个SQL文件, 那样不是更优雅吗?
SparkSQL好像没有提供相关的Api, 至少我是没有找到。 于是我自己写了一个.... 代码很简单, 如下:
def getSQL(fileName: String, fields: (String, String)*)(): String = {
//我们将SQL文件放在Redsource目录下
val stream = this.getClass.getClassLoader.getResourceAsStream(fileName)
val buff: BufferedSource = Source.fromInputStream(stream)
//读取拼装SQL
val sql = buff
.getLines()
.mkString("\n")
// 自定义属性注入
StringUtils.replaceEach(sql
, fields.map("${" + _._1 + "}").toArray
, fields.map(_._2).toArray).trim()
}
那么我们来使用一下:
val myDF = spark.sql(
val sql = getSQL("test.sql", ("date", "20200713"), ("field1", "hello"))
)
myDF .show()
这样我们就简单的将SQL文件 test 执行起来了,
并且自己注入了属性 date="20200713"
和"field1"="hello"
注入的SQL的属性在SQL文件中以 ${date}
和 ${field1}
存在
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有