r - Dbplyr 错误:将表达式转换为数据类型 int 的算术溢出错误
问题描述
我很确定已经问过类似的查询。但是,我的问题是特定于我何时将 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"
FROM (SELECT TOP 100 PERCENT "SiteID", "MachineID", "LocationID", (SUM( "TenSecCount")) AS "n"
FROM (SELECT TOP 100 PERCENT *
FROM (SELECT TOP 100 PERCENT "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 错误。有关解决问题的方法,请参阅此问题。
提示,可能类似于:
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)))
推荐阅读
- dataframe - 在 for 循环中为 pyspark 数据帧创建动态名称
- r - 将 diff 函数与 dplyr 中的 mutate at 一起使用
- html - 标题宽度:100% 导致水平滚动条
- python-3.x - Python 3 - VS Code(Windows)中的日期时间类/模块错误
- java - Camel SpringBoot POST返回对象不是JSON
- python - TypeError:列表索引必须是整数或切片,而不是 st
- pyspark - pyspark 无法使用 foreach 并行运行查询
- excel - Excel:如何有效地调节单元格,以便我可以识别观察计数小于某个数字的单元格?
- point-cloud-library - FPFH 描述符的 3D 对象识别不起作用 - 出了什么问题
- flutter - 是否可以在 Mobx 中拥有基于 DateTime.now 的计算属性?