在 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 上对服务帐户进行身份验证