scala - 如何在 Spark 中使用“and”将空条件应用于 sql select?
问题描述
我有一个 UuidConditionSet,当 if 条件错误时,我想将一个空字符串应用于我的 select 语句(或者只是忽略这个 UuidConditionSet),但是我收到了这个错误。如何解决这个问题呢?
mismatched input 'FROM' expecting <EOF>(line 10, pos 3)
这是选择
(SELECT
item,
amount,
date
from my_table
where record_type = 'myType'
and ( date_format(date, "yyyy-MM-dd") >= '2020-02-27'
and date_format(date, "yyyy-MM-dd") <= '2020-02-28' )
and ()
var UuidConditionSet = ""
var UuidCondition = Seq.empty[String]
if(!UuidList.mkString.isEmpty) {
UuidCondition = for {
Uuid <- UuidList
UuidConditionSet = s"${SQLColumnHelper.EVENT_INFO_STRUCT_NAME}.${SQLColumnHelper.UUID} = '".concat(eventUuid).concat("'")
} yield UuidConditionSet
UuidConditionSet = UuidCondition.reduce(_.concat(" or ").concat(_))
}
s"""SELECT
| ${SQLColumnHelper.STRUCT_NAME_ITEM},
| ${SQLColumnHelper.STRUCT_NAME_AMOUNT},
| ${SQLColumnHelper.DATE}
| from ${sqlTableHelper.TABLE}
| where ${SQLColumnHelper.EVENT_INFO_STRUCT_NAME} = '${RECORD_TYPE}'
| and ( date_format(${SQLColumnHelper.DATE}, "${Constant.STAY_DATE_FORMAT}") >= '${stayDateRangeTuple._1}'
| and date_format(${SQLColumnHelper.DATE}, "${Constant.STAY_DATE_FORMAT}") <= '${stayDateRangeTuple._2}' )
| and ($UuidConditionSet)
解决方案
您可以在列表上使用模式匹配UuidList
来检查大小,如果列表为空,则返回一个空字符串。此外,您可以在此处使用IN
而不是多个OR
s。
尝试这个:
val UuidCondition = UuidList match {
case l if (l.size > 0) => {
l.map(u => s"'$u'").mkString(
s"and ${SQLColumnHelper.EVENT_INFO_STRUCT_NAME}.${SQLColumnHelper.UUID} in (",
",",
")"
)
}
case _ => ""
}
s"""SELECT
| ${SQLColumnHelper.STRUCT_NAME_ITEM},
| ${SQLColumnHelper.STRUCT_NAME_AMOUNT},
| ${SQLColumnHelper.DATE}
| from ${sqlTableHelper.TABLE}
| where ${SQLColumnHelper.EVENT_INFO_STRUCT_NAME} = '${RECORD_TYPE}'
| and date_format(${SQLColumnHelper.DATE}, "${Constant.STAY_DATE_FORMAT}") >= '${stayDateRangeTuple._1}'
| and date_format(${SQLColumnHelper.DATE}, "${Constant.STAY_DATE_FORMAT}") <= '${stayDateRangeTuple._2}'
| $UuidCondition
"""
推荐阅读
- swift - 如何将图像从 Firebase 加载到用户头像中
- python - 条件拟合曲线
- javascript - 无法点击 svg 元素
- docker - 在 docker-compose 中使用 build comman 时出现 rpc 错误
- wpf - 在 WPF 中更改 ListBoxItem 的选择颜色
- python - 有没有办法通过导入来从我创建另一个类的实例的地方获取类名称?
- javascript - 在 react/Javscript 中使用动态键构造对象数组
- javascript - 角度 PNPM 样式问题
- java - 在 Spring Boot webapp 中找不到 .jsp 文件
- python - Apache 上的 Flask-login 在点击几下并重新加载几页后将用户设置为匿名