gpt4 book ai didi

r - 如何使用 dplyr 和 bigrquery 从 Big Query 中的数据集中的多个表中进行选择?

转载 作者:行者123 更新时间:2023-12-04 21:10:02 25 4
gpt4 key购买 nike

我正在尝试使用 dplyr 和 bigrquery 从 Big Query 的数据集中查询多个表。该数据集包含多个表,一年中的每一天都有一个表。
我可以使用以下代码从单个表(例如,1 天的数据)进行查询,但似乎无法使其同时在多个表中工作(例如,一个月或一年的数据)。任何帮助将不胜感激。

connection <- src_bigquery("my_project", "dataset1")
first_day <- connection %>%
tbl("20150101") %>%
select(field1) %>%
group_by(field1) %>%
summarise(number = n()) %>%
arrange(desc(number))

谢谢,

胡安

最佳答案

据我所知,不支持 table wildcard functions
dplyrbigrquery在这一刻。如果您不害怕丑陋的黑客攻击,您可以提取和编辑 dplyr 的查询。构建并发送到 bq以便它指向多个表而不是一个。

设置您的结算信息并连接到 BigQuery:

my_billing <- ##########
bq_db <- src_bigquery(
project = "bigquery-public-data",
dataset = "noaa_gsod",
billing = my_billing
)
gsod <- tbl(bq_db, "gsod1929")

如何从一张表中选择(仅供比较):
gsod %>%
filter(stn == "030750") %>%
select(year, mo, da, temp) %>%
collect

Source: local data frame [92 x 4]

year mo da temp
(chr) (chr) (chr) (dbl)
1 1929 10 01 45.2
2 1929 10 02 49.2
3 1929 10 03 48.2
4 1929 10 04 43.5
5 1929 10 05 42.0
6 1929 10 06 51.0
7 1929 10 07 48.0
8 1929 10 08 43.7
9 1929 10 09 45.1
10 1929 10 10 51.3
.. ... ... ... ...

如何通过手动编辑 dplyr 生成的查询从多个表中进行选择:
multi_query <- gsod %>%
filter(stn == "030750") %>%
select(year, mo, da, temp) %>%
dplyr:::build_query(.)

multi_tables <- paste("[bigquery-public-data:noaa_gsod.gsod", c(1929, 1930), "]",
sep = "", collapse = ", ")

query_exec(
query = gsub("\\[gsod1929\\]", multi_tables, multi_query$sql),
project = my_billing
) %>% tbl_df

Source: local data frame [449 x 4]

year mo da temp
(chr) (chr) (chr) (dbl)
1 1930 06 11 51.8
2 1930 05 20 46.8
3 1930 05 21 48.5
4 1930 07 04 56.0
5 1930 08 08 54.5
6 1930 06 06 52.0
7 1930 01 14 36.8
8 1930 01 27 32.9
9 1930 02 08 35.6
10 1930 02 11 38.5
.. ... ... ... ...

结果验证:
table(.Last.value$year)

1929 1930 
92 357

关于r - 如何使用 dplyr 和 bigrquery 从 Big Query 中的数据集中的多个表中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36921012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com