参考
建库建表
在 DolphinDB 中,数据库分为分布式数据库和内存数据库。
建库
创建分布式数据库
-
“只有具备 DB_OWNER 权限的用户才可以通过数据节点或计算节点创建分布式数据库”:
- 这意味着只有拥有
DB_OWNER
权限的用户,才能在数据节点或计算节点上创建分布式数据库。 DB_OWNER
是一个权限角色,代表用户对数据库的完全控制权,类似于数据库的管理员。
- 这意味着只有拥有
-
“可通过 getUserAccess 查看当前用户是否具有该权限,如果没有,请联系管理员赋权。”:
- 使用
getUserAccess
函数来查看当前用户是否具有DB_OWNER
权限。如果没有权限,用户需要联系管理员进行授权。
- 使用
CREATE DATABASE "dfs://valuedb"
PARTITIONED BY VALUE(2023.01.01..2023.12.31),
ENGINE="TSDB"
CREATE DATABASE
是创建数据库的 SQL 语句,"dfs://valuedb"
是指定数据库的路径。"dfs://"
表示分布式数据库的标识,valuedb
是数据库名称。PARTITIONED BY VALUE(2023.01.01..2023.12.31)
指定该数据库是按照时间值(2023年1月1日到2023年12月31日)的范围进行分区。ENGINE="TSDB"
表示选择使用 TSDB 引擎,这通常用于时间序列数据。
通过 database
函数创建:
database(directory="dfs://valuedb", partitionType=VALUE,partitionScheme=2023.01.01..2023.12.31, engine='TSDB'):
-
database()
是一个函数,使用时提供多个参数来创建数据库。directory="dfs://valuedb"
指定数据库的路径,和上面的 SQL 语句类似。partitionType=VALUE
表示使用值分区类型(如按时间分区)。partitionScheme=2023.01.01..2023.12.31
指定具体的分区范围。engine='TSDB'
选择 TSDB 引擎。
创建内存数据库
内存数据库将数据直接存储在内存中,相较于传统的磁盘数据库,它具有更快的数据访问速度和更低的延迟。此外,在内存数据库中创建内存分区表,可对内存表进行并行处理,从而进一步提升数据处理效率。
内存数据库只支持通过函数 database
创建。当函数 database
的参数 directory 设置为空时,代表创建一个内存数据库。示例脚本如下:
mdb = database(directory="", partitionType=VALUE, partitionScheme=1..10)
这行代码创建了一个内存数据库,并指定了一些参数:
directory=""
:表示创建的是一个内存数据库。partitionType=VALUE
:表示按值进行分区。partitionScheme=1..10
:表示创建一个分区范围从 1 到 10 的分区,通常用于在内存数据库中划分数据。
语法、不同数据库的区别
建表
- 分布式表:适用于大规模数据存储,支持分布式计算。
- 内存表:适用于低延迟、高速存取的实时数据处理。
- 分区表:适用于将数据按特定字段划分为多个部分,方便存储和查询。
- 维度表:用于数据仓库,描述数据分析中的维度。
- 内存分区表:结合内存存储和分区管理,用于快速数据处理和分析。
DolphinDB 中,数据表分为内存表和分布式表。本节将分别举例介绍他们的创建方式。
通过 CREATE TABLE
语句创建 TSDB 分区表
CREATE DATABASE "dfs://valuedb" PARTITIONED BY VALUE(2023.01.01..2023.12.31),engine="TSDB"
CREATE TABLE "dfs://valuedb"."pt"(date DATE,time TIME,sym SYMBOL,price DOUBLE
)
PARTITIONED BY date,
sortColumns=`time
- 首先创建一个名为
valuedb
的数据库,并设置其分区方案(按值进行分区,分区范围是 2023.01.01 到 2023.12.31)。 - 然后在该数据库下创建表
pt
,表包含date
、time
、sym
和price
字段,按date
字段分区,并对数据按time
字段排序。
通过函数 createPartitionedTable 创建 TSDB 分区表
// 获取已创建的数据库句柄
valueDb = database("dfs://valuedb")
// 创建内存表 schemaTb
schemaTb = table(1:0,`date`time`sym`price,[DATE,TIME,SYMBOL,DOUBLE])
// 根据内存表 schemaTb 的结构创建 TSDB 分区表
pt = createPartitionedTable(dbHandle=valueDb, table=schemaTb, tableName=`pt, partitionColumns=`date, sortColumns=`sym`time)
更多实用细节请参考createPartitionedTable。
对于组合分区的数据库,在创建分区表时,分区列个数应匹配对应的分区方案:
通过 CREATE TABLE
语句
CREATE TABLE "dfs://compodb"."pt"(data DATE,time TIME,sym SYMBOL,price DOUBLE
)
partitionColumns=`date`sym
通过 createPartitionedTable
函数
// 获取已创建的数据库句柄
compoDb = database("dfs://compodb")
// 创建内存表 schemaTb
schemaTb = table(1:0,`date`time`sym`price,[DATE,TIME,SYMBOL,DOUBLE])
// 根据内存表 schemaTb 的结构创建组合分区表
pt = createPartitionedTable(dbHandle=compoDb, table=schemaTb, tableName=`pt, partitionColumns=`date`sym)
创建维度表
通过 CREATE TABLE
语句创建维度表
CREATE TABLE "dfs://valuedb"."dt"(date DATE,time TIME,sym SYMBOL,price DOUBLE
)
sortColumns=`sym`time
通过函数 createDimensionTable
创建维度表
// 获取已创建的数据库句柄
valueDb = database("dfs://valuedb")
// 创建内存表 schemaTb
schemaTb = table(1:0,`date`time`sym`price,[DATE,TIME,SYMBOL,DOUBLE])
// 根据内存表 schemaTb 的结构创建维度表
dt = createDimensionTable(dbHandle=valueDb, table=schemaTb, tableName=`dt, sortColumns=`sym`time)
更多使用细节,请参考 createDimensionTable 。
创建内存表
DolphinDB 支持多种内存表,包括普通内存表、索引内存表、键值内存表、流数据表、mvcc 内存表、内存分区表和缓存表等,详情请见表。
通过 CREATE LOCAL TEMPORARY TABLE
语句创建普通内存表
CREATE LOCAL TEMPORARY TABLE t(col1 INT,col2 DOUBLE,col3 STRING
)
通过函数 table 创建普通内存表
-
创建空表
t = table(1:0, `ool1`col2`col3, [INT,DOUBLE,STRING])
-
根据现有数据创建内存表
t = table(1 2 as col1, 1.1 2.2 as col2, `A1`B2 as col3)
通过 CREATE 语句和 table
函数创建内存表的区别在于, table
函数可以通过现有向量创建含有数据的内存表,CREATE 语句只能创建空表。
通过函数 createPartitionedTable 可以创建内存分区表
// 创建一个内存数据库
mdb = database("", VALUE, 1..10)
// 创建一个内存表
t = table(1:0,`id`sym`price`qty,[INT,SYMBOL,DOUBLE,INT])
// 根据内存表 t 的结构创建内存分区表
mpt = createPartitionedTable(dbHandle=mdb, table=t, tableName=`pt, partitionColumns=`id)
关于数据分区:
- DolphinDB 支持 5 种分区类型 (partitionType),分别是值分区、哈希分区、范围分区、列表分区与复合分区。分区类型一经确定,不可更改。
- 数据分区方式的选择应保证每个分区的大小均匀,且大小在 100M-1G 之间。
- 同一数据库下的所有表都是采用相同的分区方案。
- 数据库分区方案 (partitionScheme) 设定后,分布式表的值分区(VALUE)允许增加分区;分布式表的范围分区 (RANGE) 允许在最后一个现有数据分区后面增加分区;其它分布类型不允许增加分区。
- 更多关于数据分区的内容请参考数据分区。
关于存储引擎(engine):DolphinDB 支持 TSDB ,OLAP,PKEY等多种存储引擎,一个数据库的存储引擎一经确定,不可修改。