Dbplyr错误:将表达式转换为数据类型int的算术溢出错误

问题描述 投票:0回答:1

我很确定已经询问过类似的查询。但是,我的问题特定于何时将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 dbplyr
1个回答
0
投票

将数据收集到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)))
© www.soinside.com 2019 - 2024. All rights reserved.