【问题标题】:DolphinDB: Data deduplicationDolphinDB:重复数据删除
【发布时间】:2022-01-03 09:59:38
【问题描述】:

如何在 DolphinDB 中进行重复数据删除,有什么例子可以参考吗?现在,似乎数据库保留了所有数据。我可以看到 keyedTable 或 indexedTable 会丢弃重复数据,但是还有其他方法吗?

【问题讨论】:

    标签: duplicates dolphindb


    【解决方案1】:
    • 写入数据时去重(2.0或更高版本):

      要查找已安装的版本并查看是否需要更新,请运行 version。在www.dolphindb.com 更新到最新版本。

      需要TSDB引擎进行重复数据删除。将函数'database'中的参数'engine'指定为“TSDB”以启用TSDB引擎:

      login(`admin,`123456)
      if(existsDatabase("dfs://tsdb"))
      {
          dropDatabase("dfs://tsdb")
      }
      //create a distributed database and specify the parameter engine to be TSDB
      db_tsdb = database(directory = "dfs://tsdb", partitionType = VALUE, partitionScheme = 2012.03.01..2022.12.31, engine = 'TSDB')
    

    然后创建 3 个具有不同重复数据删除规则的 DFS 表。 createPartitionedTable中通过参数sortColumns指定排序列,通过参数keepDuplicates指定去重规则。重复数据删除仅在识别出重复的键值时运行。有 3 个可选的重复数据删除规则:

    • 最后:保留最新数据。
    • ALL:保留所有数据。
    • FIRST:保留第一个数据。

    在下面的例子中,我们创建3个DFS表,指定键列为“ID”和“Date”,keepDuplicates分别为“LAST”、“ALL”和“FIRST”:

    t = table(1:0,`Date`ID`Close,[DATETIME,SYMBOL,DOUBLE])
    
    tsdb_table = createPartitionedTable(dbHandle = db_tsdb, table=t, tableName="last",  sortColumns=["ID","Date"],  partitionColumns=`Date, keepDuplicates=LAST)
    last = db_tsdb.loadTable(`last)
    
    tsdb_table = createPartitionedTable(dbHandle = db_tsdb, table=t, tableName="all",  sortColumns=["ID","Date"],  partitionColumns=`Date, keepDuplicates=ALL)
    all = db_tsdb.loadTable(`all)
    
    tsdb_table = createPartitionedTable(dbHandle = db_tsdb, table=t, tableName="first",  sortColumns=["ID","Date"],  partitionColumns=`Date, keepDuplicates=FIRST)
    first = db_tsdb.loadTable(`first)
    

    写入没有重复排序列的数据并查询表:

    Date = 2012.03.01 09:30:00..(2012.03.01 09:30:00 + 4)
    ID = `000001`000001`000002`000002`000002
    Close =1.0 2.0 3.0 4.0 5.0 
    first_table = table(Date,ID,Close)
    
    last.append!(first_table)
    all.append!(first_table)
    first.append!(first_table)
    
    select * from last
    select * from all
    select * from first
    

    以上 3 个表格返回的结果与图表中显示的相同。

    然后写入具有相同排序列的数据。

    Date = 2012.03.01 09:30:00..(2012.03.01 09:30:00 + 4)
    ID = `000001`000001`000002`000002`000002
    Close =10.0 20.0 30.0 40.0 50.0 
    second_table = table(Date,ID,Close)
    
    last.append!(second_table)
    all.append!(second_table)
    first.append!(second_table)
    
    select * from last
    select * from all
    select * from first
    

    写入的数据不同,3张表应用不同的去重规则,查询结果也会不同。

    带有LAST 参数的表保留keyColumns 重复的最新数据:

    带有FIRST 参数的表保留keyColumns 重复的第一个数据:

    带有ALL 参数的表会保留每次重复keyColumns 时写入的数据:

    我的脚本:

    login(`admin,`123456)
    if(existsDatabase("dfs://tsdb"))
    {
        dropDatabase("dfs://tsdb")
    }
    
    db_tsdb = database(directory = "dfs://tsdb", partitionType = VALUE, partitionScheme = 2012.03.01..2022.12.31, engine = 'TSDB')
    
    t = table(1:0,`Date`ID`Close,[DATETIME,SYMBOL,DOUBLE])
    
    tsdb_table = createPartitionedTable(dbHandle = db_tsdb, table=t, tableName="last",  sortColumns=["ID","Date"],  partitionColumns=`Date, keepDuplicates=LAST)
    last = db_tsdb.loadTable(`last)
    
    tsdb_table = createPartitionedTable(dbHandle = db_tsdb, table=t, tableName="all",  sortColumns=["ID","Date"],  partitionColumns=`Date, keepDuplicates=ALL)
    all = db_tsdb.loadTable(`all)
    
    tsdb_table = createPartitionedTable(dbHandle = db_tsdb, table=t, tableName="first",  sortColumns=["ID","Date"],  partitionColumns=`Date, keepDuplicates=FIRST)
    first = db_tsdb.loadTable(`first)
    
    Date = 2012.03.01 09:30:00..(2012.03.01 09:30:00 + 4)
    ID = `000001`000001`000002`000002`000002
    Close =1.0 2.0 3.0 4.0 5.0 
    first_table = table(Date,ID,Close)
    
    last.append!(first_table)
    all.append!(first_table)
    first.append!(first_table)
    
    select * from last
    select * from all
    select * from first
    
    Date = 2012.03.01 09:30:00..(2012.03.01 09:30:00 + 4)
    ID = `000001`000001`000002`000002`000002
    Close =10.0 20.0 30.0 40.0 50.0 
    second_table = table(Date,ID,Close)
    
    last.append!(second_table)
    all.append!(second_table)
    first.append!(second_table)
    
    select * from last
    select * from all
    select * from first
    

    【讨论】:

      猜你喜欢
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2020-04-22
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多