Spark SQL是否区分大小写?

6

看起来 Spark SQL 对 "like" 查询是大小写敏感的,对吗?

spark.sql("select distinct status, length(status)  from table")

返回
Active|6

spark.sql("select distinct status  from table where status like '%active%'")

返回无值

spark.sql("select distinct status  from table where status like '%Active%'")

返回
 Active

可能是 https://dev59.com/alsW5IYBdhLWcg3wgnf0 的重复问题。 - stack0114106
1个回答

11

是的,Spark区分大小写。大多数关系型数据库在默认情况下对字符串比较是区分大小写的。如果要进行不区分大小写的比较,请尝试使用rlike函数或将列转换为大写/小写。

scala> val df = Seq(("Active"),("Stable"),("Inactive")).toDF("status")
df: org.apache.spark.sql.DataFrame = [status: string]

scala> df.createOrReplaceTempView("tbl")

scala> df.show
+--------+
|  status|
+--------+
|  Active|
|  Stable|
|Inactive|
+--------+


scala> spark.sql(""" select status from tbl where status like '%Active%' """).show
+------+
|status|
+------+
|Active|
+------+


scala> spark.sql(""" select status from tbl where lower(status) like '%active%' """).show
+--------+
|  status|
+--------+
|  Active|
|Inactive|
+--------+


scala>

3
根据我的经验,SQL Server 的默认安装会提供一个不区分大小写的默认排序规则。因此,你的第二个句子是不正确的。 - Damien_The_Unbeliever
@Damien,不确定关于SQL Server的部分,我会编辑那句话。 - stack0114106

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接