2016-11-06 30 views
2

LIKE条件を使用してSpark SQLで結合を実装しようとしています。Spark SQLのSQL LIKE

私はこのようなルックスに参加行っておりと '改訂' と呼ばれる行:

表A: 8NXDPVAE

表B: [4,8] NXD_V%の

SQL Server(A.revision LIKE B.revision)での結合の実行はうまくいきますが、Spark SQLで同じ処理を行っても、結合は行を返しません(内部結合を使用している場合)またはNULL値をテーブルBに返します)。

これは私が実行しているクエリです:

スカーラ> valが= spark.sql( "TPTYPE B ON A.revision LIKE B.revisionを登録しようRAWDATA A左からA.revision、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を行うことが可能ですか?

答えて

4

あなたはちょっと離れています。 - 任意の文字に一致し

  • _(アンダースコア):スパークSQLとハイブはLIKEオペレータが2つだけの特殊文字を受け入れSQL標準規則に従ってください。
  • %(パーセント) - 任意の文字シーケンスに一致します。

角カッコは、特別な意味と[4,8]試合リテラルのみ[4,8]持っていません:

spark.sql("SELECT '8NXDPVAE' RLIKE '^[4,8]NXD.V.*$'").show 
:あなたはJavaの正規表現をsuportsは RLIKE演算子を使用することができ、複雑なパターンを一致させるには

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

+-----------------------------+ 
|8NXDPVAE RLIKE ^[4,8]NXD.V.*$| 
+-----------------------------+ 
|       true| 
+-----------------------------+