标签: r-dbi

使用 dbplyr 进行数据库计算

我有一个非常简单的问题,会产生错误。示例将清除这一点。

library(odbc)
library(DBI)
library(dplyr)
library(dbplyr)

con <- dbConnect(odbc(), "myDSN")

tbl_test <- tibble(ID = c("A", "A", "A", "B", "B", "B"),
                   val = c(1, 2, 3, 4, 5, 6),
                   cond = c("H", "H", "A", "A", "A", "H"))

dbWriteTable(con, "tbl_test", tbl_test, overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)

将简单表写入数据库后,我在 db 中添加到表的链接,并尝试使用正常工作的简单条件总和。但是会遇到错误。

db_tbl <- tbl(con, in_schema("dbo", "tbl_test"))

db_tbl %>% 
  group_by(ID) %>% 
  summarise(sum = sum(val, na.rm = TRUE),
            count_cond = sum(cond == "H", na.rm=TRUE),
            sum_cond = sum(val == "H", na.rm=TRUE))

Error: <SQL> 'SELECT  TOP 10 "ID", SUM("val") AS "sum", …
Run Code Online (Sandbox Code Playgroud)

database r r-dbi dbplyr

4
推荐指数
1
解决办法
491
查看次数

如何将R连接到MySQL?无法连接到数据库:错误:无法加载插件caching_sha2_password

我最近在计算机上安装了MySQL,并尝试将RStudio连接到MySQL。我按照书中的说明以及此处的说明进行操作。但是,无论何时使用dbConnect()src_mysql在中RStudio,我都会收到以下错误消息:

Error in .local(drv, ...) : 
  Failed to connect to database: Error: Plugin caching_sha2_password could not be loaded: The specified module could not be found
Run Code Online (Sandbox Code Playgroud)

例如,我可能会在Windows中使用命令提示符登录到MySQL

mysql -u username -p

并如下创建数据库

CREATE DATABASE myDatabase;

然后在RStudio中:

library(RMySQL)
db <- dbConnect(MySQL(), dbname = "myDatabase", user = "username", 
           password = "password", host = "localhost")
Run Code Online (Sandbox Code Playgroud)

而我的回应始终是上面列出的错误消息。

如果需要的话: sessionInfo()

R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Run Code Online (Sandbox Code Playgroud)

mysql r rmysql r-dbi

4
推荐指数
1
解决办法
2112
查看次数

R SQL:从MySQL中提取数据,以获取数据帧中已有的ID列表

我在R中有一个数据框,其中包含先前查询的输出.不幸的是,我无法直接在SQL中执行此操作,因为它太慢,因此我使用的是data.table包.data.table包的输出是50,000个数据帧.我需要从数据库中提取每个id的所有记录.

# x is a dataframe containing 50,000 ids. 
Run Code Online (Sandbox Code Playgroud)

通常,我会做类似的事情,

dbGetQuery(con, "Select * from data where id in x") 
Run Code Online (Sandbox Code Playgroud)

但那不行.另一种方法是在for循环中执行50,000个查询,但我认为必须有一个更有效的方法来执行此操作.

最有效的方法是什么?

mysql sql r r-dbi

3
推荐指数
1
解决办法
787
查看次数

如何使用 DBI 包获取数据库的架构

DBI 包中是否有一个函数可以获取有关数据库架构的信息?

我正在使用 DBI 包和 odbc 驱动程序连接到 SQL Server。这些dbListTables函数允许使用schema参数显示特定模式中的表,但我找不到查询存在哪些模式的方法。

r database-schema r-dbi

3
推荐指数
1
解决办法
2808
查看次数

R 使用 dbBind 将参数传递给 SQL IN 子句(可能没有胶水包?)

只是想知道是否可以使用 DBI 将参数传递给 SQL 查询 IN 子句?已尝试以下(以及许多变体,包括未命名参数)

con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbWriteTable(con, "iris", iris)
iris_result <- dbSendQuery(con, "SELECT * FROM iris WHERE [Petal.Width] > $PW and [Petal.Length] in ($PL)")
dbBind(iris_result, list(PW=2.3, PL={6.0, 5.1}))
dbFetch(iris_result)
Run Code Online (Sandbox Code Playgroud)

这个链接,参数化查询,展示了一种使用glue包的方法,但是,我想知道是否可以只使用DBI。

谢谢。

注意,作为参考,这里是使用胶水的方法:

rs_sql <- glue_sql("SELECT * FROM iris WHERE [Petal.Width] > {pwin} and [Petal.Length] IN ({lengths*})", 
                        pwin = 2.3, lengths = c(6.0, 5.1),
                        .con = con
                        )
iris_result <- dbSendQuery(con, rs_sql)
dbFetch(iris_result)



rs_sql <- glue_sql("SELECT * FROM iris WHERE [Petal.Width] > {pwin} and …
Run Code Online (Sandbox Code Playgroud)

r r-dbi

3
推荐指数
1
解决办法
3231
查看次数

使用 ALTER TABLE 和 UPDATE 在数据库中创建变量

我有一个 50GB SQLite 数据库文件,我想计算并添加新变量。您可以利用Moody_Mudskipper 的功能或使用ALTER TABLE 和 UPDATE 的功能来创建变量而不是整个表吗?

library(dbplyr)
    library(DBI)
    con <- DBI::dbConnect(RSQLite::SQLite(), path = ":memory:")
    copy_to(con, head(iris,3),"iris")

create <- function(data,name){
   DBI::dbSendQuery(data$src$con,
                    paste("CREATE TABLE", name,"AS", dbplyr::sql_render(data)))
                             }

tbl(con,"iris") %>% 
   mutate(Sepal.Area= Sepal.Length * Sepal.Width) %>% 
   create("iris_2")
Run Code Online (Sandbox Code Playgroud)

r dplyr rsqlite r-dbi dbplyr

3
推荐指数
1
解决办法
1365
查看次数

断开R中函数内的DBI/RSQLite

我正在构建一个用于内部使用的包,并试图从用户中抽象出所有可能的数据库交互.我需要连接到数据库并断开与函数内的数据库的连接(我认为).但是,断开连接不起作用.

`my_func = function(){
    con = DBI::dbConnect(RSQLite::SQLite(), 'db_location.sqlite')
    r = DBI::dbSendQuery("SELECT * ...")
    dat = DBI::dbFetch(r)
    DBI::dbDisconnect(con)
    return(dat)
}`
Run Code Online (Sandbox Code Playgroud)

如果你调用这个函数: MY_LIBRARY::my_func()

返回数据但连接未终止并显示警告.

`Warning message:
In connection_release(conn@ptr) :
    There are 1 result in use. The connection will be released when 
    they are closed`
Run Code Online (Sandbox Code Playgroud)

r rsqlite r-dbi

3
推荐指数
1
解决办法
409
查看次数

使用RSQLite在R中加载SQLite表

我有这个函数,我曾经加载SQLite表

sqLiteConnect <- function(database, table) {
  library(DBI)
  library(RSQLite)
  con <- dbConnect("SQLite", dbname = database)
  query <- dbSendQuery(con, paste("SELECT * FROM ", table, ";", sep="")) 
  result <- fetch(query, n = -1, encoding="utf-8")
  dbClearResult(query)
  dbDisconnect(con)
  return(result)
}
Run Code Online (Sandbox Code Playgroud)

但现在它接缝会产生错误

album <- sqLiteConnect("~/Downloads/ChinookDatabase1.3_Sqlite/Chinook_Sqlite.sqlite","Album")

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘dbConnect’ for signature ‘"character"’
Called from: stop(gettextf("unable to find an inherited method for function %s for signature %s", 
    sQuote(fdef@generic), sQuote(cnames)), domain = NA)
Run Code Online (Sandbox Code Playgroud)

(我从这里下载了数据库) …

sqlite r rsqlite r-dbi

2
推荐指数
1
解决办法
3604
查看次数

用于spark SQL的SparklyR包装器:sqlContext.sql

我正在尝试为SparklyR编写SQL函数的包装器.我创建了以下函数:

sqlfunction <- function(sc, block) {
  spark_context(sc) %>% 
invoke("sqlContext.sql", block) }
Run Code Online (Sandbox Code Playgroud)

然后我用以下方法调用它:

newsqlData <- sqlfunction(sc, "select
                          substr(V1,1,2),
                          substr(V1,3,3),
                          substr(V1,6,6),
                          substr(V1,12,4),
                          substr(V1,16,4)
                          FROM TABLE1 WHERE V1 IS NOT NULL")
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Error: java.lang.IllegalArgumentException: invalid method sqlContext.sql for object 12
at sparklyr.Invoke$.invoke(invoke.scala:113)
at sparklyr.StreamHandler$.handleMethodCall(stream.scala:89)
at sparklyr.StreamHandler$.read(stream.scala:55)
at sparklyr.BackendHandler.channelRead0(handler.scala:49)
at sparklyr.BackendHandler.channelRead0(handler.scala:14)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:244)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
at …
Run Code Online (Sandbox Code Playgroud)

r apache-spark apache-spark-sql r-dbi sparklyr

2
推荐指数
1
解决办法
1479
查看次数

如何访问 R 中的嵌套 SQL 表?

从 R Studio 的ODBC 数据库文档中,我可以看到一个如何将 SQL 表读入 R 数据框架的简单示例:

data <- dbReadTable(con, "flights")
Run Code Online (Sandbox Code Playgroud)

BGBUref让我粘贴我正在尝试读取 R 数据框的表格图形(?)。这是来自我在 R studio 中的连接窗格。

嵌套表

如果我使用与上面相同的语法,con我的输出在哪里dbConnect(...) ,我得到以下内容:

df <- dbReadTable(con, "BGBURef")
#> Error: <SQL> 'SELECT * FROM "BGBURef"' nanodbc/nanodbc.cpp:1587: 42S02: 
#> [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name
#> 'BGBURef'.
Run Code Online (Sandbox Code Playgroud)

我对“表”的理解是否不正确?或者我是否需要执行类似的操作才能访问嵌套BGBUref表:

df <- dbReadTable(con, "QnRStore\dbo\BGBURef")
#> Error: '\d' is an unrecognized escape in character string starting ""QnRStore\d"
Run Code Online (Sandbox Code Playgroud)

如果我单击小电子表格图标,数据BGBUref框将出现在 R Studio 中。就我而言,我只是不知道如何将其放入定义的数据框中df


这是我运行这些命令时的输出: …

sql-server odbc r r-dbi dbplyr

1
推荐指数
1
解决办法
1677
查看次数