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.
- 我在 vertica
上创建了一个空 table
- 当我执行查询时
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 对我有用。
我有一个 1000 万行的数据框,需要将其从 R 上传回 Vertica 数据库。
DBI 的 DBwrite()
函数 运行 内存问题,我尝试通过
options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx16g"))
进程仍然 运行 进入内存问题。我打算使用 vertica 的批量复制选项来复制 csv 文件以创建 table.
- 我在 vertica 上创建了一个空 table
- 当我执行查询时
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 对我有用。