derive()

阅读(864) 标签: derive,

本章介绍derive()的多种用法。

A.derive()

描述:

为序表/排列添加字段

语法:

A.derive(xi :Fi,…)

备注:

给序表/排列A增加Fi,…字段,对A的每条记录遍历,给每个Fi赋值为xi形成含有原字段和新增字段的序表。

参数:

Fi

字段名,此时Fi不能与A中原有字段同名

xi

表达式,计算结果作为字段值

A

序表/排列

选项:

@m

数据量大的复杂运算中,并行计算提升性能,计算次序不确定

@i

xi计算结果为空时不生成该行记录(原记录字段不受控制)

@x(…;n)

抄原字段时,将字段取值为记录的字段展开,n为层数,缺省为2

返回值:

添加字段后的序表

示例:

 

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)

数据量大时提升性能

4

=file("D:\\txt_files\\data1.txt").import@t()

data1.txt中内容如下:

5

=A4.derive@i(SCORE:score_not_null)

SCORE计算结果为空时,对应的该条记录不生成

6

=demo.query("select * from DEPARTMENT")

7

=demo.query("select NAME,GENDER,DEPT,SALARY from EMPLOYEE")

 

8

>A7.switch(DEPT,A6:DEPT)

A7表中的DEPT字段值切换为记录

9

=A7.derive(SALARY*5:BONUS)

添加字段BONUS

10

=A7.derive@x(SALARY*5:BONUS)

使用@x选项,将原字段取值为记录的字段展开,默认展开两层。

注意:

new()derive()的区别:new()是重新构造了一个序表,不改变原序表;而derive()方法是先抄录原有字段再增加字段。

P.derive()

描述:

由排列生成序表

语法:

P.derive()

备注:

由排列P产生一个数据结构相同的序表,以便使用序表相关的函数。

参数:

P

排列

选项:

@o

不复制,将改变记录的指向结构,字段数不匹配者也被调整。

性能更好但有出错风险,仅在原记录所在序表可丢弃时使用!

返回值:

序表

示例:

 

A

 

1

=demo.query("select * from SCORES")

 

2

=A1.select(SCORE>90)

结果为排列

3

=A2.derive()

由排列生成序表

4

=A2.derive@o()

直接引用排列中的记录而不是产生新记录

ch.derive()

描述:

为管道内的记录添加字段

语法:

ch.derive(xi :Fi,…)

备注:

给管道ch增加Fi,…字段,对ch的每条记录遍历,给每个Fi赋值为xi,形成含有原字段和新增字段的管道。

该函数属于附加计算动作

参数:

ch

管道

Fi

字段名,此时Fi不能与ch中原有字段同名

xi

表达式,计算结果作为字段值

选项:

@i

xi计算结果为空时不生成该行记录(原记录字段不受控制)

返回值:

管道

示例:

 

A

 

1

=demo.cursor("select NAME,BIRTHDAY,HIREDATE from Employee")

 

2

=file("D:\\txt_files\\data1.txt").import@t()

data1.txt中内容如下:

3

=channel()

创建管道

4

=channel()

创建管道

5

=A3.derive(interval@y(BIRTHDAY,HIREDATE):EntryAge, age(HIREDATE):WorkAge)

在原管道的基础上添加EntryAgeWorkAge字段

6

=A3.fetch()

A3管道附加结果集函数ch.fetch(),保留管道当前数据

7

=A4.derive@i(SCORE:score_not_null)

SCORE为空时,对应的该条记录不生成

8

=A4.fetch()

A4管道附加结果集函数ch.fetch()

9

=A1.push(A3)

将游标A1中的数据推送到管道A3,此时数据不会立即被推送到管道。

10

=A2.push(A4)

将序列A2中的数据推送到管道A4

11

=A1.skip()

A1执行skip()时程序才会执行管道中的计算,游标中的数据才真正被推送到管道。

12

=A3.result()

13

=A4.result()

cs.derive()

描述:

为游标添加字段

语法:

cs.derive(xi :Fi,…)

备注:

给游标cs增加Fi,…字段,对cs的每条记录计算表达式xi,形成含有原字段和新增字段的管道,支持多路游标。

参数:

cs

游标

Fi

字段名,此时Fi不能与cs中原有字段同名

xi

表达式,计算结果作为字段值

选项:

@i

xi计算结果为空时不生成该行记录(原记录字段不受控制)

返回值:

原游标cs

示例:

 

A

 

1

=demo.cursor("select NAME,BIRTHDAY,HIREDATE from Employee")

 

2

=A1.derive(interval@y(BIRTHDAY,HIREDATE):EntryAge, age(HIREDATE):WorkAge)

在原游标的基础上添加EntryAgeWorkAge字段

3

=A2.fetch()

4

=file("D:\\txt_files\\data1.txt").cursor@t()

data1.txt中内容如下:

5

=A4.derive@i(SCORE:score_not_null)

SCORE计算结果为空时,对应的该条记录不生成

6

=A5.fetch()

T.derive()

描述:

根据键值为序表/游标添加组表中的字段

语法:

T.derive(A/cs,x:C,…;wi,...)

备注:

根据键值给序表A或者游标/多路游标cs里添加组表T中的字段。当为序表A时返回序表,为游标或者多路游标cs时返回游标。

参数:

T

组表

A/cs

序表/游标/多路游标

x

字段值

C

字段别名,可省略

wi

过滤条件,多个过滤条件间用逗号间隔,之间为AND关系

返回值:

序表/游标

示例:

 

A

 

1

=file("D:\\emp10.ctx")

 

2

=A1.create()

打开组表

3

=demo.query("select  EID from EMPLOYEE").keys(EID)

 

4

=A2.derive

(A3,NAME,GENDER)

通过序表键值增加组表中的其他字段

5

=demo.query("select  EID from EMPLOYEE").cursor()

 

6

=A2.derive(A5,NAME:NAME,GENDER:GENDER).fetch()

通过游标键值增加组表中其他字段

7

=file("D:/employees.ctx").create()

打开组表

8

=demo.query("select EID,DEPT from employee").keys(EID)

返回以EID为键的序表

9

=A7.derive(A8,NAME:name,GENDER;GENDER=="M")

根据键值给序表中增加组表里的字段,过滤条件为GENDER=="M"

T.derive( A/cs,x:C,…;wi,... )

描述:

根据键值为集群内表/集群游标添加集群表中的字段

语法:

T.derive(A/cs,x:C,…;wi,...)

备注:

根据键值给集群内表A或者集群游标/集群多路游标cs添加集群组表T中的字段。

参数:

T

组表

A/cs

集群内表/集群游标/集群多路游标

x

字段值

C

字段别名

wi

过滤条件,多个过滤条件间用逗号间隔,之间为AND关系

 

返回值:

集群游标

示例:

 

A

 

1

=file("emp1.ctx":[1],["192.168.0.118:8281"])

 

2

=A1.open()

打开集群表

3

=file("emp2.ctx":[1],["192.168.0.151:8281"]).open().memory()

返回集群内表

4

=A2.derive(A3,DEPT,SALARY).fetch()

通过集群内表键值增加集群组表中的其他字段

5

=file("emp2.ctx":[1],["192.168.0.151:8281"]).open().cursor()

 

6

=A2.derive(A5,DEPT,SALARY).fetch()

通过集群游标键值增加集群组表中其他字段

 

 

相关概念:

cs.new()

T.derive(T’/A/cs,x:C,…;wi,...)

描述:

根据键值为虚表/序表/游标添加虚表中的字段

语法:

T.derive(T’/A/cs,x:C,…;wi,...)

备注:

根据键值给虚表T’/序表A或者游标/多路游标cs里添加虚表T中的字段,结果返回虚表。

参数:

T

虚表

T’/A/cs

虚表/序表/游标/多路游标

x

字段值

C

字段别名,可省略

wi

过滤条件,多个过滤条件间用逗号间隔,之间为AND关系

返回值:

虚表

示例:

 

A

 

1

=file("emp.ctx").open().pseudo()

返回虚表,表数据内容如下:

2

=file("emp6.ctx").open().pseudo()

返回虚表,表数据内容如下:

3

=A1.derive(A2,BIRTHDAY,SALARY:em_salary)

通过虚表A2的键值增加虚表A1BIRTHDAY,SALARY字段,并将字段SALARY重命名为em_salary

4

=A3.import()

返回虚表,表数据内容如下:

5

=T("emp6.ctx")

返回序表

6

=A1.derive(A5,BIRTHDAY,SALARY)

通过序表A5的键值增加虚表A1BIRTHDAY,SALARY字段

7

=A6.import()

8

=T("emp6.ctx").cursor()

返回游标,游标内的数据如下:

9

=A1.derive(A8,BIRTHDAY,SALARY)

通过游标A8的键值增加虚表A1BIRTHDAY,SALARY字段

10

=A9.import()

T.derive( xi : Fi ,… )

描述:

为虚表添加字段

语法:

T.derive(xi :Fi,…)

备注:

给虚表T增加Fi,…字段,对虚表的每条记录计算表达式xi,形成含有原字段和新增字段的虚表。

参数:

T

虚表

xi

表达式,计算结果作为字段值

F’i

字段名,此时Fi不能与T中原有字段同名

选项:

@i

xi计算结果为空时不生成该行记录(原记录字段不受控制)

返回值:

虚表

示例:

 

A

 

1

=file("bhday.ctx").open().pseudo()

 

2

=A1.derive(interval@y(BIRTHDAY,HIREDATE):EntryAge, age(HIREDATE):WorkAge)

在原虚表的基础上添加EntryAgeWorkAge字段

3

=A2.import()

返回虚表内容如下: