Description:
Join up a channel and a bin file or an entity table by the foreign key.
Syntax:
ch.joinx(C:…,f:K:…,x:F,…;…;…;n) |
Match C,… field in channel ch with key K of the segmentable bin file f to find the corresponding records in f |
ch.joinx(C:…,T:K:…,x:F,…;…;…;n) |
Match C,… field in channel ch with key K of the entity table T to find the corresponding records in T |
Note:
The function matches the foreign key fields C,… in channel ch with the key K in bin file f or entity table T, which is ordered by K, to find the corresponding record in f /T, and makes the record’s expression x a new field F and adds it to ch to generate a new channel. The value corresponding to a mismatched record will be recorded as null.
Option:
@i |
Discard the records whose foreign key values can’t be matched |
@o(F;…) |
Generate a new record by adding a F field whose values are referenced records; expression x can be represented by ~, which means a record |
@d |
When parameters x:F are absent, discard the records whose foreign key values are matching |
@q |
Speed up the matching action according to a certain order when the channel contains a relatively small amount of data or it is a sequence |
@u |
Speed up the matching operation by shuffling records in the channel |
Parameter:
ch |
A channel |
C |
ch’s foreign key |
f |
A bin file |
T |
An entity table |
K |
The bin file/entity table’s key |
x |
An expression of the field of f/T |
F |
Name of the field of expression x |
n |
Number of buffer rows |
Return value:
Channel
Example:
Bin file:
|
A |
|
1 |
=demo.cursor("select EID,NAME,DEPT,SALARY from EMPLOYEE where EID<10 order by EID" ) |
Return a data retrieval cursor:
|
2 |
=file("D:\\joinx.btx") |
Return a bin file:
|
3 |
=channel() |
Create a channel. |
4 |
=channel() |
|
5 |
=channel() |
|
6 |
=channel() |
|
7 |
=channel() |
|
8 |
=channel() |
|
9 |
=A1.push(A3,A4,A5,A6,A7,A8) |
Join cursor A1 to channels A3, A4, A5, A6, A7 and A8, and be ready to push data into the channels. |
10 |
=A3.joinx(EID,A2:EMPLOYEEID,BONUS+1:SALARY1;5) |
Normal join; use null to represent the records whose foreign key values are mismatched. |
11 |
=A4.joinx@i(EID,A2:EMPLOYEEID,BONUS+1:SALARY1;5) |
Discard the records whose foreign key values are mismatched. |
12 |
=A5.joinx@o(F1;EID,A2:EMPLOYEEID,BONUS+1:SALARY1;5) |
Use the original records as values of the new field F1. |
13 |
=A6.joinx@o(F1;EID,A2:EMPLOYEEID,~:SALARY1;5) |
Use ~ to represent parameter x. |
14 |
=A7.joinx@d(EID,A2:EMPLOYEEID;5) |
Keep records whose foreign key values are mismatched when parameters x:F are absent. |
15 |
=A8.joinx@q(EID,A2:EMPLOYEEID,BONUS+1:SALARY1;5) |
Retrieve corresponding records from the bin file in order to match with the foreign key. |
16 |
=A1.fetch() |
Push data in cursor A1 into the channels. |
17 |
=A3.result().fetch() |
|
18 |
=A4.result().fetch() |
|
19 |
=A5.result().fetch() |
|
20 |
=A6.result().fetch() |
|
21 |
=A7.result().fetch() |
|
22 |
=A8.result().fetch() |
|
Entity table:
|
A |
|
1 |
=demo.cursor("select EID,NAME,DEPT,SALARY from EMPLOYEE where EID<10 order by EID" ) |
Return a data retrieval cursor:
|
2 |
=file("D:\\PERFORMANCE3.ctx") |
|
3 |
=A2.open() |
Open an entity table:
|
4 |
=channel() |
Create a channel. |
5 |
=channel() |
|
6 |
=channel() |
|
7 |
=channel() |
|
8 |
=channel() |
|
9 |
=channel() |
|
10 |
=A1.push(A4,A5,A6,A7,A8,A9) |
Join cursor A1 to channels A3, A4, A5, A6, A7 and A8, and be ready to push data into the channels. |
11 |
=A4.joinx(EID,A3:EMPLOYEEID,BONUS+1:SALARY1;5) |
Normal join; use null to represent the records whose foreign key values are mismatched. |
12 |
=A5.joinx@i(EID,A3:EMPLOYEEID,BONUS+1:SALARY1;5) |
Discard the records whose foreign key values are mismatched. |
13 |
=A6.joinx@o(F1;EID,A3:EMPLOYEEID,BONUS+1:SALARY1;5) |
Use the original records as values of the new field F1. |
14 |
=A7.joinx@o(F1;EID,A3:EMPLOYEEID,~:SALARY1;5) |
Use ~ to represent parameter x. |
15 |
=A8.joinx@d(EID,A3:EMPLOYEEID;5) |
Keep records whose foreign key values are mismatched when parameters x:F are absent. |
16 |
=A9.joinx@q(EID,A3:EMPLOYEEID,BONUS+1:SALARY1;5) |
Retrieve corresponding records from the entity table in order to match with the foreign key. |
17 |
=A1.fetch() |
Push data in cursor A1 into the channels. |
18 |
=A4.result().fetch() |
|
19 |
=A5.result().fetch() |
|
20 |
=A6.result().fetch() |
|
21 |
=A7.result().fetch() |
|
22 |
=A8.result().fetch() |
|
23 |
=A9.result().fetch() |
|