Description:
Add one or more fields to a table sequence or a record sequence.
Syntax:
A.derive(xi:Fi,…)
Note:
The function adds Fi,… field(s) to table sequence/record sequence A, traverses each record of A, assigns each Fi with value xi and returns a new table sequence consisting of the original fields and the new field(s) Fi.
Parameter:
|
Fi |
Field name, which shouldn’t have the same name as any of the original fields in A. |
|
xi |
Expression, whose results are used as the values of the derived fields. |
|
A |
A table sequence/record sequence. |
Option:
|
@m |
Use parallel algorithm to handle data-intensive or computation-intensive tasks to enhance performance; and no definite order for the records in the result set. |
|
@i |
Won’t generate a record if there is expression xi and its result is null. |
|
@x(…;n) |
Unfold original fields whose values are records into n levels; default of n is 2. |
|
@o |
When parameter A is a table sequence, add columns directly to it instead of generating a new table sequence. |
|
@z |
Perform the inverse operation; only applies to non-pure sequences. |
Return value:
Table sequence
Example:
|
|
A |
|
|
1 |
=demo.query("select NAME,BIRTHDAY,HIREDATE from EMPLOYEE") |
|
|
2 |
=A1.derive(interval@y(BIRTHDAY, HIREDATE):EntryAge, age(HIREDATE):WorkAge) |
|
|
3 |
=A1.derive@m(age(HIREDATE):WorkAge) |
Use the @m option to increase performance of big data handling. |
|
4 |
=file("D:\\txt_files\\data1.txt").import@t() |
Below is the file data1.txt:
|
|
5 |
=A4.derive@i(SCORE:score_not_null) |
If the SCORE value is null, the corresponding record won’t be generated.
|
|
6 |
=demo.query("select * from DEPARTMENT") |
|
|
7 |
=demo.query("select NAME,GENDER,DEPT,SALARY from EMPLOYEE") |
|
|
8 |
>A7.switch(DEPT,A6:DEPT) |
Switch values of DEPT of A7’s table over with corresponding records. |
|
9 |
=A7.derive(SALARY*5:BONUS) |
Add a new field:BONUS.
|
|
10 |
=A7.derive@x(SALARY*5:BONUS) |
Use @x option to unfold the DEPT field whose values are records; the default unfolding levels are 2.
|
|
11 |
=demo.query("select NAME,BIRTHDAY,HIREDATE from EMPLOYEE") |
Return a table sequence. |
|
12 |
=A11.derive@o(age(HIREDATE):WorkAge) |
Add the new column directly to the original table sequence rather than generating a new one; here the function returns same result as A11. Following is the result:
|
Perform the inverse operation:
|
|
A |
|
|
1 |
=demo.query("select * from SCORES ") |
Return a table sequence:
|
|
2 |
=A1.derive(cum(SCORE;CLASS,STUDENTID):F1) |
Add F1 field and perform iterative operation in a loop function to cumulatively sum SCORE values in records having same CLASS and STUDENTID values, and use the result sums as F1 values:
|
|
3 |
=A1.derive@z(cum(SCORE;CLASS,STUDENTID):F1) |
Use @z option to perform the inverse operation:
|
Note:
The difference between new() and derive(): The new() constructs a new table sequence without changing the original one. By comparison, the derive() copies the original fields and then adds new fields.