Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
493 views
in Technique[技术] by (71.8m points)

怎么删除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这只股票的数据,怎么写?下面是哪里错了吗?
image.png
image.png


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

hashBucket(`000890, 20)

得到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)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...