我有一个带有大表(约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"