数据表包含长度相等的数据列。可以使用SQL语句访问和更新数据。

创建表

DolphinDB中有很多形式的表,最常见的是内存表,用函数 table 创建。在分布式数据库场景中,DolphinDB引入分布式表,详情参考 createPartitionedTable 。此外根据不同的场景,DolphinDB还引入了依靠索引加快查询速度的索引内存表 indexedTable 以及维护键值唯一性的键值内存表 keyedTable 。在流数据场景下,可以创建流数据表 streamTable 以及高可用流数据表 haStreamTable

这里主要介绍内存表的创建。请注意,列名仅可使用中文或英文字母、数字或下划线(_),且必须以中文或英文字母开头。 1.30.14版本后,DolphinDB开始支持自动生成的表(如: pivot by 产生的表)的列名中包含特殊符号。但请注意:

  • 引用包含特殊符号的列名时,为了在SQL中引用不规范的列名,必须使用双引号包含该列名,并在双引号前加下划线,例如 _”IBM.N”, _”000001.SH”。

  • 包含特殊符号的列名只能通过SQL语句或者tb["_C"]的方式访问,不能通过tb.col的方式访问。

  • 当表内含有空字段,系统会将其转化为 NULL。

为了与之前版本的代码兼容,引入了配置变量removeSpecialCharInColumnName,默认值是false,表示允许列名包含特殊字符。如果要跟以前兼容,可以将该变量配置为true。

$ t1=table(1 2 3 as a, `x`y`z as b, 10.8 7.6 3.5 as c);
$ t1;

a

b

c

1

x

10.8

2

y

7.6

3

z

3.5

$ x=1 2 3;
$ y=4 5 6;
$ t1=table(x,y);
$ t1;

x

y

1

4

2

5

3

6

$ t=table(200:10, `name`id`value, [STRING,INT,DOUBLE]);
$ t;

name

id

value

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

列名包含特殊符号时:

$ t=table(1 2 3 as `_a, 4 5 6 as "2 ab");
$ t;

_a

2 ab

1

4

2

5

3

6

$ select _"_a" as "_aa", _"2 ab" as "2ab" from t;

_aa

2ab

1

4

2

5

3

6

$ a=([1,2],[3.2,4.3],[2019.01.02,2019.05.03]);
$ table(a);

C0

C1

C2

1

3.2

2019.01.02

2

4.3

2019.05.03

$ m=1..12$3:4;
$ table(m);

C0

C1

C2

C3

1

4

7

10

2

5

8

11

3

6

9

12

访问表

可使用<tableName>[X,Y]访问表,其中X和Y可以是标量或数据对。X用于选择行,Y用于选择列。表索引的范围从0开始,不包含上限值。例如,1:3包括1和2。类似地,2:0表示1和0。

$ t1[1:3, 1];

y

5

6

$ t1[3:1, 1];

y

6

5

$ t1[, 1];

y

4

5

6

$ t1[2, 0:2];

x

y

3

6

$ t1[2, 2:0];

x

y

6

3

$ t1[2, ];

x

y

3

6

$ t1[3:1, 2:0];

y

x

6

3

5

2

$ t1[,t1.columns()-1];

y

4

5

6

$ t1.keys();
["x","y"]

$ t1.values();
([1,2,3],[4,5,6])

用条件访问表:

$ t1[t1.x>2];      //用x>2为条件查询列

x

y

3

6

$ t1[t1.x in (1 3)];       //查询x=1或x=3的行

x

y

1

4

3

6

$ t1[t1.x>1 && t1.y<6];       //查询x>1和y<6的行

x

y

2

5

创建一个空表并插入数据:

$ t = table(100:0, `x`y`z, `STRING`DATE`DOUBLE);
// 创建一个具有三列x, y, z的表,数据类型分别为STRING, DATE, DOUBLE。表的容量为100,初始长度为0。

$ t;

x

y

z

$ insert into t values(take(`MS,3),2010.01.01 2010.01.02 2010.01.03, 1 2 3);
$ t;

x

y

z

MS

2010.01.01

1

MS

2010.01.02

2

MS

2010.01.03

3

通过赋值语句添加或更新表:

$ t=table(1 2 3 as id, 4 5 6 as value);
$ t;

id

value

1

4

2

5

3

6

$ t[`id`name]=[7 8 9, `IBM`MSFT`GOOG];
$ t;

id

value

name

7

4

IBM

8

5

MSFT

9

6

GOOG