欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > DolphinDB学习【 二】基础增删改查操作

DolphinDB学习【 二】基础增删改查操作

2025/2/25 23:22:56 来源:https://blog.csdn.net/lcadna/article/details/145587566  浏览:    关键词:DolphinDB学习【 二】基础增删改查操作

参考

建库建表

在 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,表包含 datetimesymprice 字段,按 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等多种存储引擎,一个数据库的存储引擎一经确定,不可修改。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词