博客里只介绍最常见的分区表(createPartitionedTable)的创建方法,更多自定义的操作请参考:https://github.com/dolphindb/Tutorials_CN/blob/master/partitioned_in_memory_table.md
数据表支持的数据类型请查看:https://docs.dolphindb.cn/zh/help/200/DataTypesandStructures/DataTypes/index.html
DolphinDB从创建数据库到使用数据表有下面几个流程:
创建数据库:db=database(dbPath, VALUE, 2000.01M..2001.12M)
创建一个数据表(也叫内存表):
// 生成一个随机的内存表数据,这是第一种构造数据表的习惯
randomN=5
month=take(2020.01M..2023.12M, randomN)
x=rand(1.0, randomN) // 生成随机数
myTable=table(month, x) // 先构造好数据,再拼到数据表中
select * from myTable
db
数据库创建一个分布式数据表,参考内存表myTable
的格式,分区的依据是数据中的month
列:myPartitionedTable = db.createPartitionedTable(myTable, `DBTable, `month)
将原来的内存表的数据表迁移到分布式数据表中myPartitionedTable.append!(myTable)
这样才算从数据库中添加完成一个数据表,可以查询一下分布式数据表的内容:
select * from myPartitionedTable;
完整示例如下:
dbPath = "dfs://MyTestDB"
if (existsDatabase(dbPath)){ // 判断数据库是否存在
dropDatabase(dbPath) // 删除数据库
}
db=database(dbPath, VALUE, 2000.01M..2001.12M)
// 生成一个随机的内存表数据
randomN=5
month=take(2020.01M..2023.12M, randomN)
x=rand(1.0, randomN) // 生成随机数
myTable=table(month, x)
// 创建表
myPartitionedTable = db.createPartitionedTable(t, `DBTable, `month)
// 追加写入表数据
myPartitionedTable.append!(myTable)
select * from myPartitionedTable;
总的来说创建一个数据表的总流程就是:
someTable
someTable
的格式,使用数据库.createPartitionedTable()创建一个数据表,叫有数据库罩着的someTable
someTable
的数据迁移到创建到有数据库罩着的someTable
数据表里有数据库罩着的someTable
,原始的someTable
会在会话断开后消失在内存里这个table的创建博主常用的构造方法是:
// 这是第二种构造数据表的习惯,也是博主最常用的方法
table(1..5 as index, // 注意1:第一行数据要与 "table(" 在同一行
2..6 as x,
3..7 as y,
4..8 as z // 注意2:最后一行结尾不能有逗号","
)
这里有几个要点:
上面的例子中myPartitionedTable.append!(myTable)
就是把myTable
中的数据追加到myPartitionedTable
中,而在一个已有数据表的基础上添加数据有三个步骤:
数据库中的表.append!(外部数据table)
把外部数据追加到原始数据表中因此在已有的数据表中追加数据
// 步骤1:拿到数据库中的那个表
db = database("dfs://MyTestDB")
myPartitionedTable = loadTable(db,`DBTable)
// 步骤2:新增数据转换为内存表table,博主这里就创建新的table表作为要追加的数据
append_table = table(1..5 as index,
2..6 as x,
3..7 as y,
4..8 as z
)
// 步骤3:用.append!() 追加进去
myPartitionedTable.append!(append_table)
这样就算添加完成啦
对于一个已有的数据库:dfs://myDB
,查询数据表里的表有以下两种方法
getDFSTablesByDatabase("dfs://myDB") // 查询某个分布式数据库中的表
或使用:
getTables(database("dfs://myDB"))
比如删除数据库dfs://myDB
的某张数据表someTable
db=database("dfs://myDB")
dropTable(db,"someTable");
比如修改数据库dfs://myDB
的某张数据表someTable
,改名为newSomeTable
db = database("dfs://myDB")
renameTable(db, "someTable", "newSomeTable")
select * from db.newSomeTable