【发布时间】:2017-01-28 18:09:06
【问题描述】:
我正在为数据框中的每个商店循环运行查询。通常有 70 家左右的商店,因此对于每个完整的循环,循环都会重复很多次。
这个循环可能有 75% 的时间一直运行而没有错误。
在任何一次循环迭代中,大约有 25% 的时间出现以下错误:
curl::curl_fetch_memory(url, handle = handle) 中的错误: 已超时
然后我必须弄清楚哪个迭代被炸毁,并重复循环,不包括成功完成的迭代。
我在网上找不到任何东西来帮助我了解导致这个看似随机错误的原因。也许这是一个 BQ 技术问题?似乎与它崩溃的结果集的大小没有任何关系。
这是我的代码中执行循环的部分...同样,它在大多数情况下一直有效。跨 ID 的笛卡尔积是有意的,因为我希望每个测试 ID 与商店内所有可能的控制 ID 的每个组合。
sql<-"SELECT pstore as store, max(pretrips) as pretrips FROM analytics.campaign_ids
group by 1 order by 1"
store_maxtrips<-query_exec(sql,project=project, max_pages = 1)
store_maxtrips
for (i in 1:length(store_maxtrips$store)) {
#pull back all ids shopping in same primary store as each test ID with their pre metrics
sql<-paste("SELECT a.pstore as pstore, a.id as test_id,
b.id as ctl_id,
(abs(a.zpbsales-b.zpbsales)*",wt_pb_sales,")+(abs(a.zcatsales-b.zcatsales)*",wt_cat_sales,")+
(abs(a.zsales-b.zsales)*",wt_retail_sales,")+(abs(a.ztrips-b.ztrips)*",wt_retail_trips,") as zscore
FROM analytics.campaign_ids a inner join analytics.pre_zscores b
on a.pstore=b.pstore
where a.id<>b.id and a.pstore=",store_maxtrips$store[i]," order by a.pstore, a.id, zscore")
print(paste("processing store",store_maxtrips$store[i]))
query_exec(sql,project=project,destination_table = "analytics.campaign_matches",
write_disposition = "WRITE_APPEND", max_pages = 1)
}
【问题讨论】:
-
在 Web UI 中执行这些查询通常需要多长时间?
-
它们非常快,每个在 6 到 20 秒之间。我会说平均大约是 12 秒。
-
您很可能会达到默认的 10 秒超时 - stackoverflow.com/questions/41494059/…
-
我知道有些查询需要超过 10 秒,并且没有报错。但无论如何,我想尝试增加默认值,看看是否能解决它。我正在使用 R 中的 bigrquery 包来运行循环,但我找不到任何地方来更改超时设置。你知道我可以用什么方法在 R 中为 BigQuery 会话设置超时设置吗?
-
嗨,马克,好名字。格雷厄姆引导我回答这个问题。我猜这是因为 bigrquery 使用的是相同的 HTTP 处理程序,该处理程序在循环中运行时会发生冲突。它不能解决问题(您可能想在 github.com/rstats-db/bigrquery/issues 上提出问题),但您可以将 query_exec 放在 try() 语句中,如果输出属于“try-error”类,则重试,例如response
标签: r google-bigquery