objByName
语法
objByName(name, [sharedVar])
参数
name 是一个字符串,表示表名。
sharedVar 是一个布尔值。
详情
DolphinDB在执行脚本之前先解析脚本。解析脚本的过程是检查变量是否在本地定义。如果没有在本地定义,则抛出异常。
假设我们在本地定义一个函数,然后在远程节点上执行。这个函数会查询共享表。但是,共享表在远程节点上而不在本地节点上。如果在函数的SQL语句中直接调用表名,系统将不能解析脚本。
为了解决这个问题,系统函数 objByName 在执行时会根据名称返回对象。
如果没有指定 sharedVar 参数,系统首先搜索会话中的局部变量,再搜索共享变量。如果 sharedVar 为true,表示只搜索共享变量。如果 sharedVar 为false,表示只搜索局部变量。
例子
假设在本地节点上有一个表 EarningsDates,它包含两列:Ticker 和 date。主机名为localhost服务器的8081端口上的远程节点有一个表 USPrices。它包含所有美国股票的每日价格。我们想要从远程节点取得 EarningsDates 表中所有股票在公布收益后一周的价格。
在远程节点,导入数据文件创建表 USPrices,然后在所有节点间共享。
$ USPrices = loadText("c:/DolphinDB/Data/USPrices.csv")
$ share USPrices as sharedUSPrices;
在本地节点,创建表 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 |