为什么我的DBI连接器用谓词“ where 0 = 1”进行伪查询?

时间:2019-01-15 09:09:30

标签: r dbi monetdb dbplyr

我有一些R测试代码,可用于连接到MonetDB实例。

我注意到,对于通过tbl(conn, "some_table")创建的每个连接,总会以某种方式最终以“ primer”查询 表格

SELECT *
FROM "some_table" AS "zzz1"
WHERE (0 = 1)

所以如果我运行代码

conn <- dbConnect(MonetDB.R(), host="localhost", dbname="testdb", user="monetdb", password="monetdb")
foo <- tbl(conn, "foo")
foo %>% filter(bar %like%  '%baz%') %>% collect()

我最终在输出中有两个查询

QQ: 'SELECT *
FROM "foo" AS "zzz1"
WHERE (0 = 1)'
QQ: Query result for query 0 with 0 rows and 34 cols, 0 rows.
QQ: 'SELECT *
FROM "foo")
WHERE ("bar" LIKE '%baz%')'
QQ: Query result for query 1 with 20 rows and 2 cols, 20 rows.

我不知道此附加查询来自何处。据我所知,默认情况下,DBI不应该执行任何虚拟查询。

1 个答案:

答案 0 :(得分:2)

dplyr自动生成并运行此查询以获取表的列。例如,需要弄清楚bar中的filter是否存在于表中。