sql - ODBC 连接,在 R 中获取一个表

标签 sql r odbc r-dbi

一整天都在与这个问题搏斗:

我想访问 Hadoop 上的数据(通过 Hive)。并安装了 ODBC 包。

我能够与服务器建立连接:

con <- dbConnect(odbc:: odbc(), "hadoop") 

我能够看到我想在 R 中获得的表格:
dblistTables(con, schema= "aacs") 

输出是:
   [1] "dev_1"                  "dev_2"     
   [3] "dev_3"                  "dev_4"

我想在我的 R 环境中有“dev_4”(在数据框中)。我试过:
db_orders <- tbl(con, "dev_4")

但是我收到一个错误:找不到表或 View 。下一行也没有任何结果。
db_orders <- tbl(con, "aacs.dev_4")

如何在我的 R 环境中获取该数据表?

编辑 1

试图运行接下来的两件事:
result <- dbSendQuery(con, "SELECT * FROM aacs.dev_4")

收到错误:设备上没有剩余空间。

好的,那么让我们减少查询:
result <- dbSendQuery(con, "SELECT * FROM aacs.dev_4 LIMIT 100")

但是,同样的错误:
Error: <SQL> 'SELECT * FROM aacs.dev_4 limit 100'
  nanodbc/nanodbc.cpp:1587: HY000: [Hortonworks][Hardy] (35) Error from server: error code: '2' error message: 'Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Reducer 2, vertexId=vertex_15177720341_0081_2_08, diagnostics=[Task failed, taskId=task_15177723341_0081_2_08_000146, diagnostics=[TaskAttempt 0 failed, info=[Error: FS Error in Child JVM:org.apache.hadoop.fs.FSError: java.io.IOException: No space left on device
    at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.write(RawLocalFileSystem.java:261)
    at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
    at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:58)
    at java.io.DataOutputStream.write(DataOutputStream.java:107)
    at org.apache.tez.runtime.library.common.sort.impl.IFileOutputStream.write(IFil

任何人都知道如何解决这个问题?奇怪的是没有剩余内存..因为我有很多空间(足以存储数据!)。

编辑 2

正如@Florian 建议的那样:
data <- dbReadTable(con, "aacs.dev_4") 

导致了下一个错误:
Error: <SQL> 'SELECT * FROM `aacs.dev_4`'
  nanodbc/nanodbc.cpp:1587: HY000: [Hortonworks][Hardy] (35) Error from server: error code: '2' error message: 'Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Reducer 2, vertexId=vertex_1517772023341_0082_1_08, diagnostics=[Task failed, taskId=task_1517772023341_0082_1_08_000236, diagnostics=[TaskAttempt 0 failed, info=[Error: exceptionThrown=org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$ShuffleError: error in shuffle in fetcher {Map_4} #10
    at org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$RunShuffleCallable.callInternal(Shuffle.java:360)
    at org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$RunShuffleCallable.callInternal(Shuffle.java:337)
    at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36)
    at java.util.concurrent.FutureTask.run(FutureTask.java

最佳答案

尝试

x <- dbReadTable(con, "dev_4")

完整的工作示例:
library(DBI)
library(RSQLite)

con <- dbConnect(RSQLite::SQLite(), ":memory:")

dbListTables(con)
dbWriteTable(con, "mtcars", mtcars)
x <- dbReadTable(con, "mtcars")

希望这可以帮助!

关于sql - ODBC 连接,在 R 中获取一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071856/

相关文章:

r - 将自定义缩放模型应用于数据框?

r - R 中置信区间外的有条件的颜色数据点

php - 使用 WHERE 子句 Access 、ODBC 和 PHP 速度慢

sql - DB 存储与 DB CPU - 存储计算数据或使用 View 进行计算

SQL 行到列的转换

r - 使用 k-means 在 R 中可视化大维簇

c++ - ODBC 写入 blob 示例 Oracle C++

将 ODBC 转到 iSeries : SQL0104 - Message can not be translated successfully

sql - mysql 变量赋值

mysql - 带有日志数据的复杂 SQL PIVOT