Создать Clickhouse DB и загрузить много таблиц с помощью R - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь создать БД 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 или любой разделитель).

Я также пытался с dbpĺyr используя copy_to() вместо dbWriteTable.

Кроме того, после загрузки всех таблиц я должен сделать оператор 'commit' для постоянного сохранения базы данных для последующего присоединения с R или других платформ?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 марта 2020

Учитывая, что вы не можете прочитать таблицу вне R или после перезапуска, звучит так, будто проблема фиксируется в базе данных.

Попробуйте что-то вроде следующего после lapply:

my_commit_statement = "COMMIT"
dbExecute(myconn, my_commit_statement)

С соответствующим оператором фиксации для вашего приложения.

Другая (маловероятная) возможность заключается в том, что создание или запись таблицы является временным. И dbCreateTable, и dbWriteTable из пакета DBI имеют аргумент temporary со значением по умолчанию FALSE, поэтому это не должно быть причиной. Но не помешает сделать этот аргумент явным, так как один temporary = TRUE может не дать вашей таблице сохраниться. Также стоит проверить, есть ли разница между db_create_table, который вы используете, и dbCreateTable из пакета DBI.

...