このサイトのMonetDB.R/MonetDBLiteの投稿、CRAN PDF、MonetDBサイトのドキュメントのいくつかを読んで、表示されるものの底にあることを告白しました急な学習曲線になる1つの大きなテーブルまたは多数の小さなテーブル
MonetDBLiteのドキュメントには、実際には直接呼び出されないことが書かれている注意書きの機能がいくつか記載されています。 RでMonetDB.R関数を使用すると、MonetDB.R関数の使用が推奨されていないことを示す警告が表示され、MonetDBLiteの使用を検討してください。
私のデータセットは、現在rdsファイルに保存されている30個のdata.framesを占めている約1億行×60個のfactor列です。私はRの中でその全体を処理するのに十分なメモリがないので、MonetDBにすべてをダンプし、特定のタスクに必要なデータだけを抽出したいと思います。
Data.frameパラダイムごとに1つのテーブルを選択すると、どのRスクリプトがMonetDBデータベース内のすべてのテーブルでクエリを実行しますか?私はこれが何らかのタイプのJOINだと仮定します。これはCREATE VIEWで行うことができますか?
大きなテーブルパラダイムを選択すると、既存のMonetDBテーブルに追加できるRスクリプトは何ですか?
ガイダンスをいただければ幸いです。これまで私がこれまでにまとめてきたことは次のとおりです。
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)
すべての小さなテーブルは同じスキーマ/カラムを持っていますか?その場合、 'dbWriteTable()'と 'append'フラグを' TRUE'に設定して、それらをすべて一つの大きなテーブルに入れます。 –
@Hannes - これはまさに私が前進するために必要だったものです。ありがとうございました! –
@Hannes - 回答を作成した場合は解決済みとマークします。再度、感謝します。 –