首页 > 解决方案 > 在 R 中为 Google BigQuery 使用 IN 运算符

问题描述

我将从 XLSX 文件中读取的网页向量传递给要在 BigQuery 中使用的 SQL 语句,但在使用 IN 运算符时出现错误。

library(xlsx)
library(dplyr)
library(bigrquery)

test_control_group <- xlsx::read.xlsx('./test_control_group.xlsx',
                                      sheetName = 'Test_Control')

pages <- test_control_group %>%
  dplyr::select(page) %>%
  distinct()

projectid <- "googleproject"

sql <- paste0(
  "SELECT * FROM `googleproject.dataset.table`
       WHERE page IN (", pages, ")"
)

tb <- bigrquery::bq_project_query(projectid, sql)

我得到错误:

Error: Job 'googleproject.job_bheGLdlR4_WqQ4iMu2G8UcFNscEc.europe-west2' failed
x Function not found: c at [5:24] [invalidQuery]

因为它正在识别 R 的 c() 表示法。

"\n SELECT * FROM `googleproject.dataset.table`\n  WHERE page IN (c(\"https:...))"

请问我该如何解决这个问题?

标签: rgoogle-bigquery

解决方案


将以下行添加到代码中。

pages <- dput(as.character(pages))
pages <- str_replace_all(pages, "(c\\(|\\))","")

所以脚本现在看起来像:

library(xlsx)
library(dplyr)
library(bigrquery)

test_control_group <- xlsx::read.xlsx('./test_control_group.xlsx',
                                      sheetName = 'Test_Control')

pages <- test_control_group %>%
  dplyr::select(page) %>%
  distinct()
pages <- dput(as.character(pages))
pages <- str_replace_all(pages, "(c\\(|\\))","")


projectid <- "googleproject"

sql <- paste0(
  "SELECT * FROM `googleproject.dataset.table`
       WHERE page IN (", pages, ")"
)

tb <- bigrquery::bq_project_query(projectid, sql)

推荐阅读