代码之家  ›  专栏  ›  技术社区  ›  David

在duckdb中获取一个表的散列

  •  1
  • David  · 技术社区  · 2 年前

    我有一个带有大表(约100mln行)的duckdb数据库,我想看看特定表中的一些值是否发生了变化。我不需要查看哪些行发生了更改,只要有行发生了任何更改即可。

    实现这一点的一种方法是使用表的哈希。在最简单的形式中,它可以是行计数,但理想情况下,它也会考虑表的值,像md5或类似的适当哈希算法会这样做。

    一个解决方案是将数据放入R中,然后计算一个哈希,但这意味着将所有数据都拉入R中,这可能需要很长时间。

    有有效的方法吗?我可以吗 CALL / PRAGMA duckdb来获取表的hash/size/id?

    MWE

    使用R的最小工作示例是这样的。

    con <- DBI::dbConnect(duckdb::duckdb())
    DBI::dbWriteTable(con, "mtcars", mtcars)
    
    rlang::hash(DBI::dbReadTable(con, "mtcars")) # transfers all data into R and computes the hash in R
    #> [1] "24bc99234ecb908438a9e0bfb4313c73"
    
    # update some values in the table
    DBI::dbExecute(con, "UPDATE mtcars SET disp = 123 WHERE mpg = 10.4")
    # compute the hash again to see if it has changed
    rlang::hash(DBI::dbReadTable(con, "mtcars"))
    #> [1] "64802a862b2419d9d098bbd43b614aab"
    
    0 回复  |  直到 2 年前