Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 一张大桌子或多张小桌子_R_Monetdb_Monetdblite - Fatal编程技术网

R 一张大桌子或多张小桌子

R 一张大桌子或多张小桌子,r,monetdb,monetdblite,R,Monetdb,Monetdblite,我已经阅读了这个网站上的MonetDB.R/MonetDBLite帖子、CRAN PDF以及MonetDB网站上的一些文档,并承认自己处于陡峭学习曲线的底部 MonetBlite文档列出了一些函数,并附带了书面警告,说明它们实际上并不打算直接调用。当在R中使用MaNETBD.R函数时,会出现一个警告,说明它已被弃用,请考虑使用MuteldBLITE。 我的数据集约为1亿行x 60因子列,目前占据30个data.frames,已保存到rds文件中。我没有足够的内存来处理R中的全部内容,所以我想将其

我已经阅读了这个网站上的MonetDB.R/MonetDBLite帖子、CRAN PDF以及MonetDB网站上的一些文档,并承认自己处于陡峭学习曲线的底部

MonetBlite文档列出了一些函数,并附带了书面警告,说明它们实际上并不打算直接调用。当在R中使用MaNETBD.R函数时,会出现一个警告,说明它已被弃用,请考虑使用MuteldBLITE。

我的数据集约为1亿行x 60因子列,目前占据30个data.frames,已保存到rds文件中。我没有足够的内存来处理R中的全部内容,所以我想将其全部转储到MonetDB中,只提取特定任务所需的数据

如果我选择每个data.frame一个表的范例,那么哪个R脚本会对MonetDB数据库中的所有表运行查询?我假设这是某种类型的连接。这可以通过创建视图来完成吗

如果我选择一个大表范例,那么什么R脚本允许我附加到现有的MonetDB表中

任何指导都将不胜感激。到目前为止,我已经能够拼凑出以下内容:

library( MonetDB.R )
library( MonetDBLite )
library( DBI )
library( digest )

dbDir <- 'myDirectory'

#
#   Create connection to database
#
conn  <- dbConnect( MonetDBLite(), dbDir )

#
#   Get data.table
#
f <- choose.files( default='directory to rds files', 
                       caption="select files for processing:",
                       multi=FALSE )

dt <- readRDS( file=f )

# extract file name without extension
tblName <- sub( "^([^.]*).*", "\\1", basename( f ) )

#
#   Add data.table to db
#
dbWriteTable( conn, tblName, dt )

#
#   Count rows
#
qryStr <- paste( "SELECT COUNT(*) FROM", tblName )
dbGetQuery( conn, qryStr )

#
#   After loading a few tables, stitch together into one view
#
viewStr <- "CREATE VIEW big_tbl AS
            SELECT * FROM (
                SELECT 'table1' AS type, table1.* FROM table1
                UNION ALL
                SELECT 'table2' AS type, table2.* FROM table2
                UNION ALL
                SELECT 'table3' AS type, table3.* FROM table3
            ) AS big_tbl_table"

dbGetQuery( conn, viewStr )

# dbListTables( conn )
#[1] "big_tbl" "table1"        
#[3] "table2" "table3"      

#
#   Get VIEW into R
#
library( dplyr )

mdb     <- src_monetdb( embedded=dbDir )
bigView <- tbl( mdb, 'big_tbl' ) # Error: select is not a character vector
bigView <- tbl( mdb, 'table1' )

#
#   Disconnect from db
#
dbDisconnect( conn )
库(MonetDB.R)
图书馆(MonetBlite)
图书馆(DBI)
图书馆(摘要)

dbDir所有的小表都有相同的模式/列吗?在这种情况下,我将使用
dbWriteTable()
append
标志设置为
TRUE
,将它们全部放在一个大表中

所有小表是否都具有相同的架构/列?在这种情况下,我会使用
dbWriteTable()
将它们放在一个大表中,并将
append
标志设置为
TRUE
@Hannes-太好了,这正是我需要前进的方向。谢谢大家!@汉内斯-如果你创建一个答案,我会将其标记为已解决。再次感谢。嗨,汉内斯,下面是一个快速跟进的问题:在将数据表的列写入MonetDB之前,您是将它们作为因子保留,还是将它们转换为字符(3列)、整数(12列)和数字(43列)?使用转换列填充的测试db几乎比仅使用因子填充的相同db大2倍。当加载到MonetDB表中时,factor列采用CLOB数据类型,我本以为(显然是错误的)需要比整数和double更多的字节。我想使用最安全的方法,尽可能在磁盘上进行最高的压缩。插入时仍会转换因子。