提问人:stats_noob 提问时间:12/16/2021 更新时间:12/28/2021 访问量:60
R:直接在服务器上创建表
R: Directly Creating Tables on a Server
问:
我正在使用 R 编程语言。假设我运行以下代码:
library(RODBC)
library(sqldf)
con = odbcConnect("some name", uid = "some id", pwd = "abc")
sample_query = sqlQuery(con, "select distinct * from table_a a
inner join table_b b
on (a.date_1 between b.date_2 and b.date_3 and a.id1 = b.id1) or a.id2 = b.id2)
view(sample_query)
我的问题:有没有办法直接将“sample_query”放在“con”语句中指定的服务器上?目前,“sample_query”是在 R studio 的全局环境中创建的 - 但是有没有办法将“sample_query”放在服务器上(即“table_a”和“table_b”所在的位置)?
谢谢!
答:
1赞
eshirvana
12/16/2021
#1
您可以在 RDBMS 中编写一个包含查询的存储过程,如下所示(伪代码,因为它在不同的数据库引擎中的语法可能略有不同):
create procedure procname
as
select distinct *
from table_a a
inner join table_b b on (a.date_1 between b.date_2 and b.date_3 and a.id1 = b.id1)
or a.id2 = b.id2)
end
然后:
library(RODBC)
library(sqldf)
con = odbcConnect("some name", uid = "some id", pwd = "abc")
sample_query = sqlQuery(con, "exec procname")
view(sample_query)
在某些 rdbms 中,调用过程的命令类似于 。call procname
这样可以避免 SQL 注入问题。
1赞
r2evans
12/17/2021
#2
SQL “VIEW” 往往在 DMBS 之间相当兼容:
CREATE VIEW viewname
AS
select distinct *
from table_a a
inner join table_b b
on (a.date_1 between b.date_2 and b.date_3 and a.id1 = b.id1) or a.id2 = b.id2)
(通常,明确返回的列被认为是一种很好的做法,即不使用 ,尽管这可以看作是对许多列的偏好。*
有了这个,就好像它是一张表,有或没有子句。viewname
WHERE
SELECT * from viewname
评论
VIEW
CREATE VIEW myviewname AS SELECT ... FROM ...