| distribute result [$$29] |
| -- DISTRIBUTE_RESULT |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| project ([$$29]) |
| -- STREAM_PROJECT |PARTITIONED| |
| assign [$$29] <- [{"user_name": $$34, "visitor_name": $$35}] |
| -- ASSIGN |PARTITIONED| |
| project ([$$34, $$35]) |
| -- STREAM_PROJECT |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| join (eq($$30, $$31)) |
| -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| project ([$$34, $$30]) |
| -- STREAM_PROJECT |PARTITIONED| |
| assign [$$34] <- [$$user.getField(1)] |
| -- ASSIGN |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| data-scan []<-[$$30, $$user] <- colocated.Users |
| -- DATASOURCE_SCAN |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| empty-tuple-source |
| -- EMPTY_TUPLE_SOURCE |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| project ([$$35, $$31]) |
| -- STREAM_PROJECT |PARTITIONED| |
| assign [$$35] <- [$$visitor.getField(1)] |
| -- ASSIGN |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| data-scan []<-[$$31, $$visitor] <- colocated.Visitors |
| -- DATASOURCE_SCAN |PARTITIONED| |
| exchange |
| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| |
| empty-tuple-source |
| -- EMPTY_TUPLE_SOURCE |PARTITIONED| |