Рассматривает ли Spark SQL ограничение при объединении? - PullRequest
0 голосов
/ 25 февраля 2019

Я провел следующий эксперимент.

Запрос 1:

 select f1, f2 from A where id = 10 limit 1

 | f1  |  f2  |
 --------------
 |  1  |  2   |

Запрос 2:

 select * from B as b where b.f1 = 1 and b.f2 = 2 limit 1

И Query 1, и Query 2 выполняются очень быстро.

Однако, когда я сделал следующее

 select B.* 
 from B join A 
 on B.f1 = A.f1 and B.f2 = A.f2 
 where A.id = 10 limit 1

Он работает медленно со многими этапами и задачами ...

Я предполагал, что последний запрос будет не намного дороже, чем запрос1 и запрос 2, заданный «предел 1».Его план похож на следующий.Означает ли это, что предел 1 используется только после того, как все соединения завершены ...?

== Optimized Logical Plan ==
GlobalLimit 1
+- LocalLimit 1
   +- Join Inner, ((obj_id#352L = obj_id#342L) && (obj_type#351 = obj_type#341))
      :- Project [uid#350L, obj_type#351, obj_id#352L]
      :  +- Filter ...
      :     +- Relation[...] parquet
      +- Aggregate [obj_id#342L, obj_type#341], [obj_id#342L, obj_type#341]
         +- Project [obj_type#341, obj_id#342L]
            +- Filter ...
               +- Relation[...] parquet
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...