if(existsDatabase("dfs://softDelete.level2_tl")){
    dropDatabase("dfs://softDelete.level2_tl")
}
db1 = database(,VALUE,[2023.01.01])
db2 = database(,HASH,[SYMBOL, 25])
db = database("dfs://softDelete.level2_tl",COMPO,[db1,db2],,"TSDB")
colName = `ChannelNo`ApplSeqNum`MDStreamID`SecurityID`SecurityIDSource`Price`OrderQty`Side`TradeTIme`OrderType`OrderIndex`LocalTime`SeqNo`Market`DataStatus`BizIndex
colType = [INT,LONG,INT,SYMBOL,INT,DOUBLE,INT,SYMBOL,TIMESTAMP,SYMBOL,INT,TIME,LONG,SYMBOL,INT,LONG]
tbSchema = table(1:0, colName, colType)
db.createPartitionedTable(table=tbSchema,tableName=`entrust,partitionColumns=`TradeTIme`SecurityID,sortColumns=`Market`SecurityID`TradeTIme,keepDuplicates=LAST,softDelete=true)

if(existsDatabase("dfs://softDelete.level2_tl1")){
    dropDatabase("dfs://softDelete.level2_tl1")
}
db1 = database(,VALUE,[2023.01.01])
db2 = database(,HASH,[SYMBOL, 25])
db = database("dfs://softDelete.level2_tl1",COMPO,[db1,db2],,"TSDB")
db.createPartitionedTable(table=tbSchema,tableName=`entrust1,partitionColumns=`TradeTIme`SecurityID,sortColumns=`Market`SecurityID`TradeTIme,keepDuplicates=LAST,softDelete=false)

def test1(s){
    delete from loadTable("dfs://softDelete.level2_tl","entrust") where Price < s
    flushTSDBCache()
}
def test2(s){
    delete from loadTable("dfs://softDelete.level2_tl1","entrust1") where Price < s
    flushTSDBCache()
}
def test3(){
    select * from loadTable("dfs://softDelete.level2_tl","entrust")
}    
def test4(){
    select * from loadTable("dfs://softDelete.level2_tl1","entrust1")
}

t1 = table(1:0,`涓€涓垎鍖烘暟鎹噺`鏁版嵁鍒犻櫎鐧惧垎姣擿杞垹闄ゅ垹闄ょ殑鏁版嵁閲廯纭垹闄ゅ垹闄ょ殑鏁版嵁閲廯杞垹闄elete鏃堕棿`纭垹闄elete鏃堕棿`杞垹闄や笉鍚堝苟鏌ヨ鏁版嵁`纭垹闄や笉鍚堝苟鏌ヨ鏁版嵁`杞垹闄ゆ煡璇㈡暟鎹甡纭垹闄ゆ煡璇㈡暟鎹甡杞垹闄ゅ垹闄ゅ悗鏁版嵁閲廯纭垹闄ゅ垹闄ゅ悗鏁版嵁閲�,[INT,INT,INT,INT,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,INT,INT])

num11111 = [1000000,5000000,10000000,30000000]

for(n in num11111){
    for(s in 1..9*10){
        for(i in 1:20){
            jobId = array(string)
            for(j in 1:51){
                
                Symbol = `000021`000155`000418`000673`000757`000759`000851`000856`000909`000961
                TradeTime = array(timestamp)
                for(i in 0:Symbol.size()){
                    TradeTime.append!(2015.07.01 09:15:00.160..((2015.07.01 09:15:00.160+n/10)-1))
                }
                TradeTime = TradeTime+j*86400000
                t = table(
                    take(int(),n) as ChannelNo,
                    take(long(),n) as ApplSeqNum,
                    take(int(),n) as MDStreamID,
                    take(Symbol,n) as SecurityID,
                    take(int(),n) as SecurityIDSource,
                    take(0..99,n) as Price,
                    rand(20,n)*100 as OrderQty,
                    rand(`S`B,n) as Side,
                    TradeTime as TradeTIme,
                    take(["0","1","2"],n) as OrderType,
                    take(int(),n) as OrderIndex,
                    take(time(),n) as LocalTime,
                    take(long(),n) as SeqNo,
                    take(`sz,n) as Market,
                    take(int(),n) as DataStatus,
                    take(long(),n) as BizIndex
                )
                jobId.append!(submitJob("tt"+rand(100,1)[0],"t",append!,loadTable("dfs://softDelete.level2_tl","entrust"),t))
                jobId.append!(submitJob("tt"+rand(100,1)[0],"t",append!,loadTable("dfs://softDelete.level2_tl1","entrust1"),t))
            }
            for(i in jobId){
                getJobReturn(i,true)
            }
            // peach(append!,loadTable("dfs://softDelete.level2_tl","entrust"), t)
            // peach(append!,loadTable("dfs://softDelete.level2_tl1","entrust1"), t).
            flushTSDBCache()

            num1 = exec count(*) from loadTable("dfs://softDelete.level2_tl","entrust") where Price < s
            num2 = exec count(*) from loadTable("dfs://softDelete.level2_tl1","entrust1") where Price < s
            
            for(dbName in getClusterDFSDatabases()) {clearCachedDatabase(dbName)};
        
            useSoftDelete = evalTimer(test1{s})
            noUseSoftDelete = evalTimer(test2{s})
            chunkIds = exec chunkId from getChunksMeta() where type=1  
    
            for(dbName in getClusterDFSDatabases()) {clearCachedDatabase(dbName)};
        
            useSoftDeleteQueryNoCompaction = evalTimer(test3)
            noUseSoftDeleteQueryNoCompaction = evalTimer(test4)
        
            for (x in chunkIds) {
                triggerTSDBCompaction(x)
            }
    
            for(dbName in getClusterDFSDatabases()) {clearCachedDatabase(dbName)};
    
            useSoftDeleteQuery = evalTimer(test3)
            noUseSoftDeleteQuery = evalTimer(test4)
    
            num11 = exec count(*) from loadTable("dfs://softDelete.level2_tl","entrust")
            num12 = exec count(*) from loadTable("dfs://softDelete.level2_tl1","entrust1")
            
            insert into t2 values(n,s,num1[0],num2[0],useSoftDelete,noUseSoftDelete,useSoftDeleteQueryNoCompaction,noUseSoftDeleteQueryNoCompaction,useSoftDeleteQuery,noUseSoftDeleteQuery,num11[0],num12[0])
            
            truncate("dfs://softDelete.level2_tl","entrust")
            truncate("dfs://softDelete.level2_tl1","entrust1")
        }
    }
}

select round(avg(杞垹闄elete鏃堕棿)/avg(纭垹闄elete鏃堕棿),3) as a,round(avg(杞垹闄や笉鍚堝苟鏌ヨ鏁版嵁)/avg(纭垹闄や笉鍚堝苟鏌ヨ鏁版嵁),3) as b,round(avg(杞垹闄ゆ煡璇㈡暟鎹�)/avg(纭垹闄ゆ煡璇㈡暟鎹�),3) as c from t1 group by 鏁版嵁鍒犻櫎鐧惧垎姣�