如何使用 dbplyr 和 BigQuery 按分区过滤

问题描述

我使用 dbplyr 连接到 BigQuery 表,并且这些表通常按日期或时间进行分区(该列称为 _PARTITIONDATE 或 _PARTITIONTIME)。在 BigQuery 中,您可以使用 WHERE _PARTITIONDATE > "some date" 进行过滤以访问表的段并提高查询性能

但是当我通过 dbplyr 连接到一个表时,没有要过滤的分区列。这是预期的行为吗?

解决方法

我发现您可以使用 build_sql 中的 dbplyr 函数来过滤表的分区列,然后使用 dbplyr 继续编写查询,例如:

tbl(con,"table_name") %>%
filter(!!build_sql("DATE(_PARTITIONTIME > '2021-06-21'",con = con)

只要没有 dbplyr 等价物,您就可以这样做。