这个想法是使用bq工具以csv格式向存储在BigQuery系统中的数据提供R会话。 bq工具的输出显示数据和不需要的消息,例如更新的作业状态和警告消息。 是否有任何标志,因此bq工具只会在没有任何其他消息的情况下在csv中返回查询数据?
> cmdbq <- "bq --format=csv query \"SELECT id, SEC_TO_TIMESTAMP(timestamp) AS time FROM publicdata:samples.wikipedia LIMIT 5\""
> r1 <- shell(cmdbq,intern=TRUE)
> r1
[1] "\rWaiting on bqjob_r1b11c1f4_00000144c13cea58_1 ... (0s) Current status: DONE " "id,time"
[3] "18524,2009-08-03 09:13:51" "2252318,2008-11-24 00:41:42"
[5] "3430772,2007-01-11 05:43:19" "11170233,2007-05-11 12:13:36"
[7] "1008805,2007-06-19 20:34:13" ""
[9] "There are available updates for some Cloud SDK components. To " "install them, please run:"
[11] " $ gcloud components update" ""
> r2 <- read.csv(text=paste(r1[2:7],collapse="\n"),stringsAsFactors=FALSE)
> r2
id time
1 18524 2009-08-03 09:13:51
2 2252318 2008-11-24 00:41:42
3 3430772 2007-01-11 05:43:19
4 11170233 2007-05-11 12:13:36
5 1008805 2007-06-19 20:34:13
>
注意:我知道bigrquery包的存在,但是我想使用这种方法,因为这部分代码将在foreach并行化循环中运行,它简化了每个节点的身份验证步骤。
答案 0 :(得分:4)
如果您使用bq -q
,则会取消作业状态消息。不幸的是,gcloud消息被添加到包装器而不是bq本身,所以我不知道如何禁用它,除了运行gcloud components update
答案 1 :(得分:4)
有关需要更新的消息将打印到stderr。这样做是为了只捕获stdout,它不会干扰刮取输出。
或者,您可以通过运行
永久禁用此消息$ gcloud config set --section component_manager disable_update_check true
尽管如此,您将来需要手动检查更新。