r语言 - 使用dbplyr和across查找SQL表中缺失值的数量



我试图使用dbplyr来计算数据库中所有列的缺失行数。数据库为Azure Synapse SQL数据库。

我有一个简单的表,只有一列,"MyColumn"用于测试目的和使用:

b = a %>% summarise(across(everything(), ~ sum(is.na(.))))

但不幸的是得到错误:

Error: nanodbc/nanodbc.cpp:1655: 42000: [Microsoft][ODBC Driver 17 for[SQL Server][SQL Server]解析错误在行:1,列:45:不正确'IS'附近的语法。'SELECT TOP 11 SUM(CAST) ((("MyColumn")是NULL), 1,0) AS BIT)) AS "SELECT "MyColumn"从干净自己的"dbo"MyTable"q01">

有什么想法我可能做错了吗?

使用dbplyr 2.1.1

感谢

根据错误消息,这是您的dplyr命令被翻译成的SQL查询:

SELECT TOP 11 SUM(CAST(IIF((("MyColumn") IS NULL), 1, 0) AS BIT)) AS "MyColumn"
FROM (
SELECT "MyColumn"
FROM "dbo"."MyTable"
) "q01"

如果你可以直接在SQL中运行这个查询,那么它会告诉你为什么失败。

我想到了两种可能性:

  1. BIT类型的列上对SUM的SQL对象的一些风格
  2. across可能无法与dbplyr完全翻译。

其中,最有可能是第一点,解决方法是使用ifelse:

b = a %>% summarise(across(everything(), ~ sum(ifelse(is.na(.), 1, 0))))

因为ifelse将返回数值而不是BIT的值。

最新更新