怎么删除DolphinDB分布式表中某天某只股票的数据

数据库是组合分区,第一个维度按天(MDDate列)进行值分区,第二个维度按照股票代码(SecurityID列)分为20个HASH分区,代码如下:

db1 = database("", VALUE, 2020.01.01..2020.12.31)
db2 = database("", HASH,[SYMBOL,20])
db = database(database,COMPO, [db1,db2])
colNames=`MDDate`Type`Seq`ExchID`SecurityID`ExTime`LocalTime`TradeTime`TradePrice`Volumn`Turnover`TradeBuyNo`TradeSellNo`TradeFlag
colTypes=[DATE,INT,INT,SYMBOL,SYMBOL,TIME,TIME,TIME,LONG,LONG,DOUBLE,INT,INT,SYMBOL]
t=table(1:0,colNames,colTypes)
transpt=db.createPartitionedTable(t,`transpt,`MDDate`SecurityID)

我想删除2018.03.01这一天的000890这只股票的数据,怎么写?下面是哪里错了吗?

attachments-2021-05-41mkEn3T60a5bdc118dbd.pngattachments-2021-05-RBNLSN9a60a5bdc537439.png

请先 登录 后评论

2 个回答

Juntao Wang

DolphinDB分布式表目前不支持delete,要删除记录需要先把相关分区的数据整个读取出来保存到内存表并从内存表删除数据,然后用dropPartition函数删除这个分区,再把内存表数据写入到分布式表。
想删除2018.03.01这一天的000890这只股票的数据,步骤如下:
(1).先求出000890在hash分区中的bucket:

hashBucket(`00089020)

得到bucket为3.
(2).得到分区数据

t=select * from loadTable(db, `testTb1) where MDDate=2018.03.01,hashBucket(symbol, 20)=3

(3).从内存表中删除

delete from t where symbol=`000890

(4).删除分区

dropPartition(db,"/20180301/Key3")

(5).写入数据

loadTable(db, `testTb1).append!(t)
请先 登录 后评论
hawkyin

1.30.6以后,支持delete from,分布式表也可以删除行了。

请先 登录 后评论