Push/Export 从 R 到 Vertica 数据库的大型数据框

Push/Export large datframe from R to Vertica database

我有一个 1000 万行的数据框,需要将其从 R 上传回 Vertica 数据库。

DBI 的 DBwrite() 函数 运行 内存问题,我尝试通过

将内存增加到 16g
options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx16g"))

进程仍然 运行 进入内存问题。我打算使用 vertica 的批量复制选项来复制 csv 文件以创建 table.

  1. 我在 vertica
  2. 上创建了一个空 table
  3. 当我执行查询时
dbSendQuery(vertica, "COPY hpcom_usr.VM_test FROM LOCAL \'/opt/mount1/musoumit/MarketBasketAnalysis/Code/test.csv\'  enclosed by \'\"\' DELIMITER \',\' direct REJECTED DATA \'./code/temp/rejected.txt\' EXCEPTIONS \'./code/temp/exceptions.txt\'")

我 运行 遇到了这个错误。

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set", : Unable to retrieve JDBC result set JDBC ERROR: [Vertica]JDBC A ResultSet was expected but not generated from query "COPY hpcom_usr.VM_test FROM LOCAL '/opt/mount1/musoumit/MarketBasketAnalysis/Code/test.csv' enclosed by '"' DELIMITER ',' direct REJECTED DATA './code/temp/rejected.txt' EXCEPTIONS './code/temp/exceptions.txt'". Query not executed.

请帮助我做错了什么。 Vertica 还提供 STDIN 选项。 Link

请帮助我如何执行此操作。

我的环境。

中 OS 7 R 3.6.3(这里没有 R Studio,我必须从 CLI 执行) Tidyverse 1.0.x Vertica 驱动程序 9.x 系统 128GB内存和28Core系统。

你的问题是你触发了 dbSendQuery() ,它与下面的 dbFetch() 和最后的 dbClearResult() 一起存在 - 但仅适用于查询 SQL 语句 - 那些实际上return一个结果集。

Vertica 的 COPY <table> FROM [LOCAL] 'file.ext' ... 命令被视为 DML 命令。对于那些 - 正如本文档所说...

https://www.rdocumentation.org/packages/DBI/versions/0.5-1/topics/dbSendQuery

..您需要使用 dbSendStatement() 进行数据操作语句。

试一试 - 祝你好运...

dbSendUpdate(vertica, "COPY hpcom_usr.VM_test FROM LOCAL \'/opt/mount1/musoumit/MarketBasketAnalysis/Code/test.csv\'  enclosed by \'\"\' DELIMITER \',\' direct REJECTED DATA \'./code/temp/rejected.txt\' EXCEPTIONS \'./code/temp/exceptions.txt\'")

代替 dbSendQuery 对我有用。