remoteRun
语法
remoteRun(conn, script, args)
参数
conn 是远程数据库的连接句柄。
script 是要执行的脚本或函数名。
args 可选参数,如果 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 |