我很确定已经询问过类似的查询。但是,我的问题特定于何时将R会话连接到SQL Server数据库。
accept<-x%>%
group_by(SiteID, MachineID, LocationID) %>%
filter(DateTime>="2019-01-1" & DateTime<"2019-12-31") %>%
summarise(n=(sum(TenSecCount))) %>%
collect()
[当我尝试将数据收集到数据框中时,出现以下错误-
将表达式转换为数据类型int的算术溢出错误。 'SELECT“ SiteID”,“ MachineID”,“ LocationID”,CAST(“ n” AS VARCHAR(MAX))AS“ n” 从(选择前100%的“ SiteID”,“ MachineID”,“ LocationID”,(SUM(“ TenSecCount”)))为“ n” 从(选择前100%* 从(选择前100%的“ MachineID”,“ OutletID”,“ TenSecCount”)
是否有任何解决方法?
将数据收集到R中时会出现此错误,因为仅在收集时才评估远程SQL表。
dbplyr通过将返回结果的SQL查询定义您的远程表。在您要求返回结果之前,您的远程表定义与等待运行的SQL脚本没有太大区别。
[当您从该表中请求结果时,如果使用collect
,则在服务器上执行sql代码,并将结果返回给R。这意味着您可能拥有无效的远程表定义,直到您知道它为止执行它。例如:
remote_table <- server_df %>%
group_by(SiteID, MachineID, LocationID) %>%
filter(DateTime>="2019-01-1" & DateTime<"2019-12-31") %>%
summarise(n=(sum(TenSecCount)))
# no error because all we have done is define an sql query and store it in remote_table
# review underlying sql query
show_query(remote_table)
# if you copy & paste this query and try to run it directly on the server it will error
# attempt to collect data
local_table <- remote_table %>% collect()
# error occurs on evaluation
您可以判断出在评估sql时出现了错误,因为R向您返回了导致错误的sql代码和sql错误消息。 “将表达式转换为数据类型int的算术溢出错误。”是SQL错误,而不是R错误。解决方法请参见this question。
提示,可能类似于:
remote_table <- server_df %>%
mutate(TenSecCount = CAST(TenSecCount AS BIGINT)) %>% # additional step changing data type
group_by(SiteID, MachineID, LocationID) %>%
filter(DateTime>="2019-01-1" & DateTime<"2019-12-31") %>%
summarise(n=(sum(TenSecCount)))