2

このサイトの MonetDB.R/MonetDBLite の投稿、CRAN PDF、および MonetDB サイトのドキュメントの一部を読みましたが、急な学習曲線のように見えるものの底にいることを告白します。

MonetDBLite のドキュメントには、実際には直接呼び出されることを意図していないという警告が書かれた少数の関数がリストされています。R で MonetDB.R 関数を使用すると、非推奨であることを示す警告が表示されるため、MonetDBLite の使用を検討してください。

私のデータセットは約 1 億行 x 60 因子列で、現在 rds ファイルに保存されている 30 個の data.frames を占めています。R で全体を処理するのに十分なメモリがないため、すべてを MonetDB にダンプし、特定のタスクに必要なデータのみを抽出したいと考えています。

data.frame パラダイムごとに 1 つのテーブルを選択した場合、どの R スクリプトが MonetDB データベース内のすべてのテーブルに対してクエリを実行しますか? これはある種のJOINだと思います。これは CREATE VIEW で実行できますか?

1 つの大きなテーブル パラダイムを選択した場合、どの 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 )
4

1 に答える 1

3

小さなテーブルはすべて同じスキーマ/列を持っていますか? その場合dbWriteTable()appendフラグを に設定して使用して、それらすべてを 1 つの大きなテーブルに配置しTRUEます。

于 2016-05-01T05:51:54.490 に答える