问题很简单。我有以下代码:
# 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存在,但这似乎是为了添加新字段/列,而不是为了附加新行...
当使用从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 令牌到期前的时间长度?
通过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) 我正在使用带有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)
任何想法可能会发生在这里?
我尝试了两种使用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?
如果可能,我想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 的最佳方法是什么?
谢谢! …
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)
谁能看到我缺少什么吗?提前致谢。
我使用该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))
在这个问题上几乎没有帮助。先感谢您。
如何使用公共数据获得简单的“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)