sql - 创建 Clickhouse 数据库并使用 R 加载大量表
问题描述
我正在尝试创建一个 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
using 。copy_to()
dbWriteTable
此外,在加载所有表后,我是否应该执行“提交”语句以将数据库永久保存到 R 或其他平台的后续访问?
提前致谢。
解决方案
鉴于您无法在 R 外部或重新启动后读取表,听起来问题正在提交给数据库。
在 之后尝试以下操作lapply
:
my_commit_statement = "COMMIT"
dbExecute(myconn, my_commit_statement)
为您的应用程序使用适当的提交语句。
另一种(不太可能)的可能性是表创建或写入是临时的。dbCreateTable
DBI 包和dbWriteTable
来自 DBI 包的参数都具有temporary
默认值FALSE
,因此这不应该是原因。但是明确说明这一论点并没有什么坏处,因为这样temporary = TRUE
可以使您的表无法持久化。db_create_table
还值得检查您正在使用的与dbCreateTable
DBI 包之间是否有任何区别。
推荐阅读
- sql - 检索不共享密钥的 JSON 元素
- android - 模拟器:模拟器:错误:找不到模拟器可执行文件。模拟器:进程以退出代码-1完成
- c# - 不能同时旋转和移动
- grails - 库不匹配(quartz、activiti-engine、usertype.jodatime、grails-shiro)
- sql - 用于大临时数据的 Nosql 或 sql 数据库
- java - Android java,数据库类中的Dao接口似乎很奇怪
- c - 如何区分 C 代码中的 armhf (ARMv7) 和 armel (ARMv4)?
- python - 将裁剪图像的文件夹填充到最大宽度
- php - 在按钮中使用 slug 功能,但 div 代码下方的按钮被隐藏
- selenium - 如何使用 Selenium WebDriver 将浏览器置于最前面?