gpt4 book ai didi

dolphindb - 如何删除dfs表中的重复数据?

转载 作者:行者123 更新时间:2023-12-04 12:28:47 26 4
gpt4 key购买 nike

如何删除dfs表中的重复数据?
我使用以下脚本创建了一个包含一些重复数据的 dfs 表:

login("admin", "123456")
if(existsDatabase("dfs://compoDB")){
dropDatabase("dfs://compoDB")
}
ID = `a`a`a`a`a`a`a
date = 2017.08.07 2017.08.07 2017.08.08 2017.08.08 2017.08.09 2017.08.09 2017.08.09
x = 1 1 2 2 3 3 3
t = table(ID, date, x)

dbDate = database(, VALUE, 2017.08.07..2017.08.11)
dbID= database(, HASH, [SYMBOL, 8])
db = database("dfs://compoDB", COMPO, [dbDate, dbID])
pt = db.createPartitionedTable(t, `pt, `date`ID)
pt.append!(t)
此表中有一些重复数据。现在我想从中删除重复的数据。怎么做?

最佳答案

想法:

  • 步骤 1 : 取分布式表的数据到内存表t。
  • 步骤 2 : 去重内存表t上的删除操作。
  • 步骤3 : 删除dfs表中涉及的分区,对数据进行去重。
  • 步骤 4 : 将去重后的内存表 t 改写回分布式表。

  • 上述场景的代码可以这样写:
    def DeletDuplicateData(DBname, TBname, days){
    for(day in days){
    pt = loadTable(DBname, TBname)
    t = select * from pt where date=day
    delete from t where isDuplicated([ID, date, x], LAST)=true
    try{dropPartition(database(DBname), days)} catch(ex){print ex}
    pt.append!(t)
    }
    }
    DBname = "dfs://compoDB"
    TBname = "pt"
    days = 2000.01.01..2021.06.30
    ploop(DeletDuplicateData{DBname, TBname}, days)
    loop(DeletDuplicateData{DBname, TBname}, days)
    备注 : 可以选择 ploop 和 loop 之一来执行。
    这是为了对 2001.01.01 到 2021.06.30 的数据进行重复数据删除。如果计算机内存资源比较大,建议并行执行。如果电脑内存资源比较少,日常数据量比较大,建议串行操作。
    执行上述代码后,查询dfs表:
    select * from loadTable("dfs://compoDB", `pt)
    结果 :


    ID
    日期
    X


    一种
    2017.08.07
    1

    一种
    2017.08.08
    2

    一种
    2017.08.09
    3

    关于dolphindb - 如何删除dfs表中的重复数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68493652/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com