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