remoteRun

语法

remoteRun(conn, script, args)

参数

conn 是远程数据库的连接句柄。

script 是要执行的脚本。

如果 script 是函数名,args 是函数的参数。

例子

第一种用法:在远程节点上执行脚本。

$ conn =  xdb("localhost",81);
$ remoteRun(conn, "x=rand(1.0,10000000); y=x pow 2; avg y");
0.333254

第二种用法:

  • 如果functionName加了单引号,双引号或者反引号,那么表示在远程节点上调用函数。函数是定义在远程节点上,但是参数由本地节点传过去。

$ h=xdb("localhost",80);
$ x=remoteRun(h, "sum",1..100);
$ x;
5050
  • 如果functionName没有加单引号,双引号或者反引号,那么表示调用的函数定义在本地节点上。参数也是由本地节点传过去。

假设在本地节点,我们有一个表EarningsDates,该表有两列:股票代码和日期。表中3个股票中的每一个,都有2006年第三季度公布盈利的日期。在远程节点有一个表USPrices,节点的名字为localhost,端口号为8081。它包含所有美国股票的每日股票价格。我们希望从远程节点获得在宣布收益后的一周内所有EarningsDates表中股票的价格。 在远程节点,我们导入数据文件创建表USPrices,然后将其共享为名叫sharedUSPrices的表。

$ USPrices = loadText("c:/DolphinDB/Data/USPrices.csv");
$ share USPrices as USPrices;

当我们创建到远程节点的连接时,远程节点将为此连接创建一个新的会话。此新会话与远程节点上的其他会话完全隔离。这对于开发来说很方便,因为开发人员不必担心名称冲突。 然而,有时候我们也希望在同一节点上的多个会话之间共享数据。这时我们可以使用函数 share 来共享对象。目前只能在DolphinDB中共享表。 在本地节点上,我们创建 EarningsDates表,然后用脚本将其传输到远程节点。在执行完毕后,结果被返回到本地节点。

$ EarningsDates=table(`XOM`AAPL`IBM as TICKER, 2006.10.26 2006.10.19 2006.10.17 as date)
$ def loadDailyPrice(data){
$     dateDict = dict(data.TICKER, data.date)
$     return select date, TICKER, PRC from objByName("sharedUSPrices") where dateDict[TICKER]<date<=dateDict[TICKER]+7
$ }
$ conn = xdb("localhost",8081)
$ prices = conn(loadDailyPrice, EarningsDates);
$ prices;

date

TICKER

PRC

2006.10.27

XOM

71.46

2006.10.30

XOM

70.84

2006.10.31

XOM

71.42

2006.11.01

XOM

71.06

2006.11.02

XOM

71.19

2006.10.18

IBM

89.82

2006.10.19

IBM

89.86

2006.10.20

IBM

90.48

2006.10.23

IBM

91.56

2006.10.24

IBM

91.49

2006.10.20

AAPL

79.95

2006.10.23

AAPL

81.46

2006.10.24

AAPL

81.05

2006.10.25

AAPL

81.68

2006.10.26

AAPL

82.19