在 R 中为 Google BigQuery 使用 IN 运算符

Posted

技术标签:

【中文标题】在 R 中为 Google BigQuery 使用 IN 运算符【英文标题】:Using IN Operator for Google BigQuery in R 【发布时间】:2021-10-18 15:31:00 【问题描述】:

我将从 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:...))"

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

【问题讨论】:

pages 的值是多少? 在这里考虑解决方案:***.com/questions/6347356/… 感谢@rtenha,dput 使用了正则表达式替换。 【参考方案1】:

将以下行添加到代码中。

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)

【讨论】:

【参考方案2】:

这里我建议你检查这些选项。

变量页面保存在一个变量中以获得该变量中的结果,并将这个新变量连接到 SQL 查询中。你可以看到更多information about c Function

你可以看看这个例子。

#Save the c function to a variable
x2 <- c(\"https:...”)
 
#use in the query statement
sql <- paste0( "SELECT * FROM `googleproject.dataset.table` WHERE page IN (", x2, ")" )

您可以将 unnest 语句与 BigQuery 结合使用,并在新表中存储数据并操作 BigQuery 中的所有信息。您可以查看有关UNNEST statement的更多信息。

你可以看看这个例子。

SELECT *
FROM UNNEST(['foo', 'bar', 'baz', 'qux', 'corge', 'garply', 'waldo', 'fred'])
  AS element
WITH OFFSET AS offset
ORDER BY offset;

+----------+--------+
| element  | offset |
+----------+--------+
| foo      | 0      |
| bar      | 1      |
| baz      | 2      |
| qux      | 3      |
| corge    | 4      |
| garply   | 5      |
| waldo    | 6      |
| fred     | 7      |
+----------+--------+

也许您可以将 Excel 中的数据插入另一个表中的 BigQuery 并操作数据库中的所有信息。你可以看到更多information about export to BigQuery。

【讨论】:

以上是关于在 R 中为 Google BigQuery 使用 IN 运算符的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google bigquery 中为多个动态表创建授权视图?

如何使用R将Google Cloud Datalab输出保存到BigQuery中

如何使用 R 将 Google Cloud Datalab 输出保存到 BigQuery

通过 R Studio Server 使用 BigQuery 在 Google Compute Engine 上对服务帐户进行身份验证

R - 为 Google BigQuery 导入清理数据

BigQuery 提取昨天的数据,其中日期在表名中为 filename20181203