标签: bigrquery

使用 R 的 bigrquery 库将数据追加/插入到 BigQuery 表中

问题很简单。我有以下代码:

# authenticate
bigrquery::bq_auth(path = '/Users/me/restofthepath/bigquery-credentials.json')

# set my project ID and dataset name
project_id <- 'mygreatprojectid'
dataset_name <- 'static'

# how i normally create a new table
players_table = bq_table(project = project_id, dataset = dataset_name, table = 'players')
bq_table_create(x = players_table, fields = as_bq_fields(players_df))
bq_table_upload(x = players_table, values = players_df)
Run Code Online (Sandbox Code Playgroud)

这里players_df是已经在 R 中计算的玩家统计数据的数据框。以下代码成功运行,创建了一个新表。然而,如果我想将更多球员添加到表格中,我就会陷入困境。我已经尝试过以下方法:

bq_table_upload(x = players_table, values = players_df_2)
Run Code Online (Sandbox Code Playgroud)

...players_df_2另一个具有更多玩家统计数据的数据框在哪里...但是,这会返回错误Error: Already Exists: Table mygreatprojectid:static.players [duplicate]

关于如何执行此操作有什么想法,最好不必删除+重新创建表?谢谢!!

编辑:看起来bq_table_patch存在,但这似乎是为了添加新字段/列,而不是为了附加新行...

r google-bigquery bigrquery

11
推荐指数
1
解决办法
3522
查看次数

使用 bigquery 时增加 tidyverse API OAuth 令牌过期前的时间?

使用从bigrqueryř中,tidyverse API请求进行认证,其中,一旦提供,允许从R会话访问大量查询。下载结果可能很耗时,如果 oauth 令牌在传输中到期,则下载失败:

错误:凭据无效 [authError]

示例代码

# install.packages("tidyverse"); install.packages('bigrquery')
Sys.setenv(BIGQUERY_TEST_PROJECT="your-gcp-project-id") 
library(tidyverse)
library(dbplyr)
library(bigrquery)

billing <- bq_test_project()

connection <- dbConnect(
  bigrquery::bigquery(),
  project = "your-gcp-project-id",
  dataset = "dataset-name",
  billing = billing
)

mytable <- tbl(connection, "mytable")

mytable %>%
  -- some heavy dplyr wrangling --
  %>% collect()
Run Code Online (Sandbox Code Playgroud)

哪个返回

Running job [/] 20s
Complete
Billed 400GB
Downloading 230,000,000 rows
Downloading data [=====--------] 28% ETA: 24h
Run Code Online (Sandbox Code Playgroud)

但过了一段时间

Error: Invalid Credentials [authError]
Run Code Online (Sandbox Code Playgroud)

如何增加 0Auth 令牌到期前的时间长度?

r google-bigquery bigrquery tidyverse-api gargle

9
推荐指数
1
解决办法
208
查看次数

通过R从BigQuery查询数据时,是否有办法将大整数转换为字符串?

通过API通过R从BigQuery查询数据时,是否有比将大数转换为字符串更好的处理大整数的方法?

这是一个MVE,显示整数显示为“ NA”的问题:

> library(bigrquery)
> 
> bq_str <- "
+ SELECT 
+    206932402797274623 AS big_pk
+   ,SAFE_CAST(206932402797274623 AS string) AS string_pk
+ "
> 
> my_df <- bigrquery::query_exec(query = bq_str, 
+                                project = 'XXXXXXXXXXX', 
+                                use_legacy_sql = FALSE,
+                                bigint = "integer64")
0 bytes processed
Warning message:
In converter[[type]](data_m[i, ]) :
  NAs introduced by coercion to integer range
> head(my_df)
  big_pk          string_pk
1     NA 206932402797274623
Run Code Online (Sandbox Code Playgroud)

这是代码:

library(bigrquery)

bq_str <- "
SELECT 
   206932402797274623 AS big_pk
  ,SAFE_CAST(206932402797274623 AS string) AS string_pk …
Run Code Online (Sandbox Code Playgroud)

integer r biginteger google-bigquery bigrquery

7
推荐指数
1
解决办法
121
查看次数

查询文本指定use_legacy_sql:false,而API选项指定:true

我正在使用带有bigrquery的standardSQL:

library(bigrquery)
project <- "</project-name>"


sql <- "
#standardSQL
SELECT
</sql-query>;"


result <- query_exec(sql, project = project, useLegacySql = FALSE)
Run Code Online (Sandbox Code Playgroud)

当我运行R脚本时,我收到以下错误:

 "Error: Query text specifies use_legacy_sql:false, while API options specify:true"
Run Code Online (Sandbox Code Playgroud)

任何想法可能会发生在这里?

r google-bigquery bigrquery

5
推荐指数
1
解决办法
1541
查看次数

如何从 BigQuery 将大型数据集加载到 R?

我尝试了两种使用Bigrquery包的方法

library(bigrquery)
library(DBI)

con <- dbConnect(
  bigrquery::bigquery(),
  project = "YOUR PROJECT ID HERE",
  dataset = "YOUR DATASET"
)
test<- dbGetQuery(con, sql, n = 10000, max_pages = Inf)
Run Code Online (Sandbox Code Playgroud)

sql <- `YOUR LARGE QUERY HERE` #long query saved to View and its select here
tb <- bigrquery::bq_project_query(project, sql)
bq_table_download(tb, max_results = 1000)
Run Code Online (Sandbox Code Playgroud)

但未能解决错误,这里"Error: Requested Resource Too Large to Return [responseTooLarge]"可能存在相关问题,但我对完成工作的任何工具感兴趣:我已经尝试了此处概述的解决方案,但它们失败了。

如何从 BigQuery 将大型数据集加载到 R?

r google-bigquery bigrquery

5
推荐指数
1
解决办法
4002
查看次数

如何使用 dplyr 语法选择带有 bigrquery 的嵌套字段?

如果可能,我想bigrquery使用dplyr语法(而不是 SQL)探索 Google Analytics 360 数据。要点是我想了解用户旅程——我有兴趣在用户级别(甚至跨会话)找到最常见的页面序列。

我以为我可以这样做:

sample_query <- ga_sample %>%
  select(fullVisitorId, date, visitStartTime, totals, channelGrouping,
  hits.page.pagePath) %>% 
  collect()
Run Code Online (Sandbox Code Playgroud)

但我收到一个hits.page.pagePath未找到的错误。然后我尝试:

sample_query <- ga_sample %>%
  select(fullVisitorId, date, visitStartTime, totals, channelGrouping, hits) %>% 
  collect() %>% 
  unnest_wider(hits)
Run Code Online (Sandbox Code Playgroud)

但结果是Error: Requested Resource Too Large to Return [responseTooLarge],这是完全有道理的。

从我收集到的信息来看,使用 SQL 语法,解决方法是unnest远程访问,并且select只有hits.page.pagePath字段(而不是整个hits顶级字段)。

例如,这样的事情(这是一个不同的查询,但传达了这一点):

SELECT
  hits.page.pagePath
FROM
  'bigquery-public-data.google_analytics_sample.ga_sessions_20160801' AS GA,
  UNNEST(GA.hits) AS hits
GROUP BY
  hits.page.pagePath
Run Code Online (Sandbox Code Playgroud)

是否可以用dplyr语法做类似的事情?如果不可能,那么使用 SQL 的最佳方法是什么?

谢谢! …

google-analytics r unnest dbplyr bigrquery

5
推荐指数
1
解决办法
445
查看次数

使用 R Markdown 文档中的 bigrquery 对 Bigquery 进行身份验证

bigrquery我在从我编写的 R Markdown 文档中连接到 GCP 服务帐户时遇到问题。当我从控制台尝试时,身份验证工作正常。两个都

library(bigrquery)
bq_auth()
Run Code Online (Sandbox Code Playgroud)

library(bigrquery)
bq_auth(email="my-service-account-email@myproject.iam.gserviceaccount.com")
Run Code Online (Sandbox Code Playgroud)

启动带有对话框的浏览器,让我按预期使用指定的帐户进行选择和身份验证。但在 R Markdown 中,任何像这样的尝试

options("httr_oob_default" = TRUE)
bq_auth(email="my-service-account-email@myproject.iam.gserviceaccount.com")
Run Code Online (Sandbox Code Playgroud)

甚至使用这样的完整列表

bq_auth(
  email = "my-service-account-email@myproject.iam.gserviceaccount.com",
  path = NULL,
  scopes = c("https://www.googleapis.com/auth/bigquery"),
  cache = gargle::gargle_oauth_cache(),
  use_oob = gargle::gargle_oob_default(),
  token = NULL
)
Run Code Online (Sandbox Code Playgroud)

导致错误

Error: Can't get Google credentials.
Are you running bigrquery in a non-interactive session? Consider:
  * Call `bq_auth()` directly with all necessary specifics.
Run Code Online (Sandbox Code Playgroud)

谁能看到我缺少什么吗?提前致谢。

authentication r google-bigquery bigrquery

5
推荐指数
1
解决办法
1970
查看次数

'start_index' (TYPE_UINT64) 处的值无效,从 BigQuery 将数据下载到 R 时出现“1e+05”[无效] 问题

我使用该bigrquery包成功地将 Google BigQuery 与 R 环境连接起来。

我已经定义了一个sql提取报告的语句。使用该 bq_table_download函数时,出现以下错误。

Invalid value at 'start_index' (TYPE_UINT64), "1e+05" [invalid]

代码:

sql <- "SELECT * FROM ABC"

df <- bq_project_query(billing, sql)

data <- (bq_table_download(df))

在这个问题上几乎没有帮助。先感谢您。

r google-bigquery bigrquery

5
推荐指数
1
解决办法
987
查看次数

如何解决 R 包“bigrquery”中的“身份验证范围不足”?

问题

如何使用公共数据获得简单的“bigrquery”函数?我只想获得任何“bigrquery”函数来从 Google Cloud Platform Big Query 返回数据。

背景

示例如下:

我首先从 bigrquery 中查看这个示例作为起点(我已经安装了该软件包):

library(bigrquery)
billing <- bq_test_project() # replace this with your project ID 
sql <- "SELECT year, month, day, weight_pounds FROM `publicdata.samples.natality`"

tb <- bq_project_query(billing, sql)
bq_table_download(tb, n_max = 10)
#> First chunk includes all requested rows.
#> # A tibble: 10 x 4
#>     year month   day weight_pounds
#>    <int> <int> <int>         <dbl>
#>  1  1969     1    20          7.00
#>  2  1969     1    27          7.69 …
Run Code Online (Sandbox Code Playgroud)

r google-authentication bigrquery

4
推荐指数
1
解决办法
2066
查看次数