创建clickhouse数据库并用r加载大量表

xpcnnkqh  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(492)

我试图创建一个clickhouse数据库,并将许多文件中的值复制到一个表中(所有文件的列顺序相同)。
但我不知道该怎么处理。
我用的是rclickhouse,我不知道它和clickhouse-r有什么区别。

library(RClickhouse)
library(DBI)
library(tidyverse)

eggnog_dir <- "/home/acpguedes/projects/sig_trans/data/eggnog/table/"
setwd(eggnog_dir)

myconn <- DBI::dbConnect(drv = RClickhouse::clickhouse())

mytables <- list.files(".") # all tables are in the same folder 

mysqltb <- db_create_table(con = myconn, table = 'eggnog')

lapply(mytables, function(x) {
  read_tsv(file = x, 
           col_names = c( #in my case the tables has no header
             'sequence',
             'model',
             'start',
             'end',
             'evalue',
             'cov',
             'qstart',
             'qend',
             'iteration',
             'score',
             'talilen',
             'qlen',
             'estart',
             'eend',
             'program'
             )
           ) %>% dbWriteTable(conn=myconn, value = ., name = "domains", append=TRUE) 
  }
    ) -> dt

不管列本身,我只想举一个例子,说明如何创建一个表,并将许多文件的内容加载到表中(如tsv ou csv或任何delim表)。
我还试着 dbpĺyr 使用 copy_to() 相反 dbWriteTable .
另外,在加载完所有表之后,我是否应该执行“commit”语句将数据库永久保存到r或其他平台的后期访问?
提前谢谢。

iezvtpos

iezvtpos1#

如果不能在r外部或在重新启动后读取表,那么问题似乎是提交到数据库。
在考试结束后尝试以下方法 lapply :

my_commit_statement = "COMMIT"
dbExecute(myconn, my_commit_statement)

为您的应用程序使用适当的commit语句。
另一种可能性(不太可能)是表的创建或写入是临时的。两者 dbCreateTable 以及 dbWriteTable 在dbi包中有一个参数 temporary 使用默认值 FALSE 所以这不应该是原因。但把这个论点说清楚也无妨 temporary = TRUE 会让你的table不留着。同样值得检查的是 db_create_table 你正在使用的 dbCreateTable 从dbi包。

相关问题