gpt4 book ai didi

Spark SQL 中的 SQL LIKE

转载 作者:行者123 更新时间:2023-12-03 01:48:37 33 4
gpt4 key购买 nike

我正在尝试使用 LIKE 条件在 Spark SQL 中实现联接。

我正在执行连接的行看起来像这样,称为“修订”:

表A:

8NXDPVAE

表B:

[4,8]NXD_V%

在 SQL Server 上执行联接(A.revision LIKE B.revision)效果很好,但是在 Spark SQL 中执行相同操作时,联接不会返回任何行(如果使用内部联接)或表 B 的空值(如果使用外连接)。

这是我正在运行的查询:

val joined = spark.sql("SELECT A.revision, B.revision FROM RAWDATA A LEFT JOIN TPTYPE B ON A.revision LIKE B.revision")

计划如下:

== Physical Plan ==
BroadcastNestedLoopJoin BuildLeft, LeftOuter, revision#15 LIKE revision#282, false
:- BroadcastExchange IdentityBroadcastMode
: +- *Project [revision#15]
: +- *Scan JDBCRelation(RAWDATA) [revision#15] PushedFilters: [EqualTo(bulk_id,2016092419270100198)], ReadSchema: struct<revision>
+- *Scan JDBCRelation(TPTYPE) [revision#282] ReadSchema: struct<revision>

是否可以像这样执行 LIKE 连接,或者我还差得远吗?

最佳答案

你只差了一点点。 Spark SQL 和 Hive 遵循 SQL 标准约定,其中 LIKE 运算符仅接受两个特殊字符:

  • _(下划线)- 匹配任意字符。
  • %(百分比)- 匹配任意字符序列。

方括号没有特殊含义,[4,8] 仅匹配 [4,8] 文字:

spark.sql("SELECT '[4,8]' LIKE '[4,8]'").show
+----------------+
|[4,8] LIKE [4,8]|
+----------------+
| true|
+----------------+

要匹配复杂的模式,您可以使用支持 Java 正则表达式的 RLIKE 运算符:

spark.sql("SELECT '8NXDPVAE' RLIKE '^[4,8]NXD.V.*$'").show
+-----------------------------+
|8NXDPVAE RLIKE ^[4,8]NXD.V.*$|
+-----------------------------+
| true|
+-----------------------------+

关于Spark SQL 中的 SQL LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40454262/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com