loadTable

语法

loadTable(database, tableName, [partitions], [memoryMode=false])

参数

database 可以是字符串,表示数据库的路径,也可以是数据库句柄。

tableName 是字符串,表示表的名称,它需要使用反引号(`)或双引号。

partitions 是标量或向量,表示要加载的分区。注意,只有本地磁盘数据库支持该参数,分布式数据库不支持该参数。

memoryMode 是布尔值,表示是否把数据加载到内存。如果 memoryMode =false,表示只加载元数据到内存;如果 memoryMode =true,表示将实际数据加载到内存。注意,只有本地磁盘数据库支持该参数,分布式数据库不支持该参数。对于分布式数据库,只将元数据加载到内存中。

详情

将数据加载到内存中。

  • 对于分布式数据库,返回包含元数据的表对象。

  • 对于本地磁盘数据库,如果 memoryMode =false,返回包含元数据的表对象;如果 memoryMode =true,返回包含实际数据的内存分区表。

例子

例1. 分布式数据库

$ n=1000000
$ ID=rand(100, n)
$ dates=2017.08.07..2017.08.11
$ date=rand(dates, n)
$ x=rand(10.0, n)
$ t1=table(ID, date, x);

$ dbDate = database(, VALUE, 2017.08.07..2017.08.11)
$ dbID=database(, RANGE, 0 50 100);
$ db = database("dfs://compoDB", COMPO, [dbDate, dbID]);
$ pt = db.createPartitionedTable(t1, `pt, `date`ID).append!(t1)

$ t2=table(0..100 as ID,take(2017.08.07..2017.08.11,101) as date)
$ dt = db.createTable(t2, `dt).append!(t2)
  • 加载维度表:

$ tmp = loadTable("dfs://compoDB", `dt)
$ select count(*) from tmp

count

101

  • 加载分区表:

$ tmp = loadTable("dfs://compoDB", `pt)
$ select count(*) from tmp

count

1000000

  • 对于分布式数据库,loadTable函数不支持加载指定分区的数据。如果需要将某些分区的数据加载到内存中,可以在SQL语句中指定过滤条件。

$ tmp = loadTable("dfs://compoDB", `pt)
$ select * from tmp where date=2017.08.07

例2. 本地磁盘数据库

  • 加载本地磁盘未分区表:

$ n=2000000
$ syms=`IBM`C`MS`MSFT`JPM`ORCL`FB`GE
$ timestamp=09:30:00+rand(18000,n)
$ sym=rand(syms,n)
$ qty=100*(1+rand(100,n))
$ price=5.0+rand(100.0,n)
$ t1= table(timestamp,sym,qty,price)

$ db=database("C:/DolphinDB/Data/db01");
$ saveTable(db, t1, `t1);

$ tt=loadTable(db,`t1);

$ // alternatively, we can specify the folder path to load a table:
$ tt=loadTable("C:/DolphinDB/Data/db01",`t1);
  • 加载本地磁盘分区表的某些分区:

$ n = 2000000
$ workDir = "C:/DolphinDB/Data"
$ if(!exists(workDir)) mkdir(workDir)
$ trades=table(rand(`IBM`MSFT`GM`C`YHOO`GOOG,n) as sym, 2000.01.01+rand(365,n) as date, 10.0+rand(2.0,n) as price, rand(1000,n) as qty)
$ trades.saveText(workDir + "/trades.txt")

$ db = database(workDir + "/trade1",VALUE,`IBM`MSFT`GM`C`YHOO`GOOG)
$ db.loadTextEx("trades","sym", workDir + "/trades.txt")
$ trades = db.loadTable("trades",`IBM`GM`YHOO,1)

对于范围分区,我们可以使用范围中的某个值表示整个分区。

$ db = database(workDir + "/trade2",RANGE,[2000.01.01, 2000.04.01, 2000.07.01, 2000.10.01, 2001.01.01])
$ db.loadTextEx("trades","date", workDir + "/trades.txt")

下面两个命令类似:

$ trades = db.loadTable("trades",[2000.01.01, 2000.07.01],true)
$ trades = db.loadTable("trades",[2000.03.06, 2000.09.15],true)

注意,对于组合分区的数据库,目前仅加载第一层分区的子集。

  • 将本地磁盘分区表加载为内存分区表:

$ n = 2000000
$ workDir = "C:/DolphinDB/Data"
$ if(!exists(workDir)) mkdir(workDir)
$ trades=table(rand(`IBM`MSFT`GM`C`YHOO`GOOG,n) as sym, 2000.01.01+rand(365,n) as date, 10.0+rand(2.0,n) as price, rand(1000,n) as qty)
$ trades.saveText(workDir + "/trades.txt")

$ db = database(workDir + "/trade1",VALUE,`IBM`MSFT`GM`C`YHOO`GOOG)
$ db.loadTextEx("trades","sym", workDir + "/trades.txt")
$ trades = db.loadTable("trades",`IBM`GM`YHOO,1)

$ db = database(workDir + "/trade3",RANGE, 0 5 10 15 20)
$ db.loadTextEx("trades","price", workDir + "/trades.txt")
$ trades = db.loadTable("trades", ,1)

对于内存的分区表,我们可以执行一些函数,如 update!, drop!, rename!, sortBy!.