5

パッケージがあります: RMySQL

R から大量のデータを mysql に一括アップロードするにはどうすればよいですか? 約 100 万行、80 列の csv があります。

このようなものは機能しますか?

dbWriteTable(con, "test2", "~/data/test2.csv") ## table from a file

これは行ごとに挿入されるのではないかと心配しています...

4

3 に答える 3

4

同じクライアントから同時に多くの行を挿入する場合は、複数の VALUES で INSERT ステートメントを使用できます。

INSERT INTO test2(col1, col2, col3, col4) 
VALUES 
('val1', 'val2', val3, val4),
('val1', 'val2', val3, val4),
('val1', 'val2', val3, val4)

クエリの作成方法の例を次に示します。私はdata.table ここで使用しています:

dat <- matrix(seq(4*3), 3, 4)
library(data.table)
DT <- data.table(t(dat))
query <- paste('INSERT INTO test2(col1, col2, col3, col4)\nVALUES\n',
                gsub('c','',(DT[,paste(.SD,collapse='\n')])))

   cat(query)
INSERT INTO test2(col1, col2, col3, col4)
VALUES
 (1, 4, 7, 10)
(2, 5, 8, 11)
(3, 6, 9, 12)

次に、次を使用して実行できますdbGetQuery

  dbGetQuery(con, query)
于 2013-07-15T03:40:07.553 に答える
3

@petermの答えを洗い流すために、data.frameを次のようにMySQLにロードする関数を次に示しますLOAD DATA INFILE

saveData <- function(data, # a data frame
                     tableName, # table name, possibly qualified (e.g. "my_db.customers")
                     ...) # arguments to DBI::dbConnect
                    {

    query  <-  sprintf("LOAD DATA INFILE '%s' 
INTO TABLE %s 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' -- or '\r\n'
IGNORE 1 LINES;" , TEMPFILE,tableName)

    # WRITE THE DATA TO A LOCAL FILE
    TEMPFILE  <-  tempfile(fileext='.csv')
    write.csv(data,TEMPFILE)
    on.exit(file.remove(TEMPFILE))

    # CONNECT TO THE DATABASE
    db <- dbConnect(MySQL(), ... )

    # SUBMIT THE UPDATE QUERY AND DISCONNECT
    dbGetQuery(db, query)
    dbDisconnect(db)
}
于 2015-11-17T23:47:51.137 に答える