我已经阅读了该站点上的 MonetDB.R/MonetDBLite 帖子、CRAN PDF 以及 MonetDB 站点上的一些文档,并承认自己处于陡峭学习曲线的底部。
MonetDBLite 文档列出了一些函数,并附有书面警告,它们并不是真的要被直接调用。在 R 中使用 MonetDB.R 函数时,会出现一条警告,指出它已被弃用,请考虑使用 MonetDBLite。
我的数据集大约有 1 亿行 x 60 个因子列,目前占用 30 个已保存到 rds 文件的 data.frames。我没有足够的内存来使用 R 中的全部内容,因此我想将其全部转储到 MonetDB 中,并仅提取特定任务所需的数据。
如果我为每个 data.frame 范例选择一个表,那么什么 R 脚本将对 MonetDB 数据库中的所有表运行查询?我认为这是某种类型的 JOIN。这可以用 CREATE VIEW 完成吗?
如果我选择一个大表范例,什么 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 )