Jes*_*unk 2 postgresql r dplyr
我的R(v。3.1.1)dplyr(v。0.3.0.2)可以访问我的POSTGRES 9.3.5 TABLE,但不能访问同一数据库中的VIEW。
dplyr是否支持访问POSTGRES 9.3.5 VIEW?
在POSTGRES中,我的VIEW定义如下:
centralstats=# \d "nicStats5"
View "public.nicStats5"
Column | Type | Modifiers
--------------+-------------------+-----------
affectedId | integer |
timeRecorded | bigint |
dn | character varying |
bytesRx | bigint |
Run Code Online (Sandbox Code Playgroud)
查看定义:
SELECT "adaptorNICVnicStats"."affectedId",
"adaptorNICVnicStats"."timeRecorded",
"affectedId2Dn".dn,
"adaptorNICVnicStats"."bytesRx"
FROM "adaptorNICVnicStats",
"affectedId2Dn"
WHERE "adaptorNICVnicStats"."affectedId" = "affectedId2Dn"."affectedId";
Run Code Online (Sandbox Code Playgroud)
IN R可以从dplyr访问定义了我的VIEW的所有数据库。并且访问我的VIEW失败,如下所示:
centralstats <- src_postgres("centralstats",host = NULL, port = NULL,"postgres","Jmu2014!")
adaptorNICVnicStats <-tbl(centralstats, "adaptorNICVnicStats")
affectedId2Dn <-tbl(centralstats, "affectedId2Dn")
nicStats5 <-tbl(centralstats, "nicStats5")
## Fejl: Table nicStats5 not found in database //* COMMENT: "Fejl" is the Danish word for ERROR
Run Code Online (Sandbox Code Playgroud)
David,Greg,感谢您的反馈。
我实际上找到了解决问题的方法,我可以使用dplyr中的build_sql函数使dplyr读取VIEW,从而直接将“ SQL隧道”建立到PostgreSQL中。
可以说nicStats6是PostgreSQL中的TABLE,那么我可以使用以下命令将其“导入”到dplyr中:
My_nicStats6 <- tbl(centralstats, "nicStats6")
Run Code Online (Sandbox Code Playgroud)
如我最初的问题所述,这不适用于VIEW,所以当nicStats5是PostgreSQL中的VIEW时
My_nicStats5 <-tbl(centralstats, "nicStats5")
Run Code Online (Sandbox Code Playgroud)
将导致错误“找不到表”
但是,此到nicStats5的“ SQL隧道”有效:
My_nicStats5 <- tbl(centralstats, build_sql('SELECT * FROM "nicStats5"'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |