2016-01-23 44 views
0

我知道有一种方法可以将查询结果放入表中;有一种方法可以将整个表格复制到另一个表格中;并且有一种方法可以逐个列出一个表(tabledata:使用startIndex,maxResults和pageToken的列表)。BigQuery tabledata:列表输出到bigquery表中

但是,我想要做的是用tabledata:list查看现有表并将结果零碎地输出到其他表中。我想用它作为分片表的有效方法。

我无法找到对此功能的引用,或针对此问题的任何解决方法。

回答

0

重要的是认识到:Tabledata.List API不BQL(BigQuery SQL),而是BigQuery API,你可以在你选择的client使用的一部分。 这就是说,你在你的问题中列出的逻辑可以通过多种方式来实现,下面是一个例子(高级步骤):

调用使用pageToken为下一次迭代循环内或退出循环Tabledata.List。 在每次迭代中,处理来自Tabledata.List的响应,提取实际数据并使用streaming dataTabledata.InsertAll API插入到目标表中。你也可以使用内循环来遍历在给定迭代中提取的行,并定义哪一个去哪个表/分片。 这是非常通用的逻辑,具体实现取决于您使用的客户端。 希望这有助于

+0

这意味着数据在本地下载(BQ外部),然后发送回BQ。我知道如何做到这一点,而且我不需要使用InsertAll(这非常昂贵),但可以使用简单的插入作业。问题是,我可以在BQ内部完成,而不必再次返回吗?也许联邦表使用谷歌云? – user3688176

+0

重要的是,“在阅读某人对您的问题的回答后,您应该做的第一件事就是对答案进行投票,就像任何其他用户(有足够的声誉)一样。投票回答有用的答案,并接受你认为对你最有帮助的答案。还有更多...当有人回答你的问题时,你可以检查怎么做 - http://stackoverflow.com/help/someone-answers和http://meta.stackexchange.com/questions/5234/how-does接受答复工作#5235 –

0

对于你的描述,我建议你使用云数据流的批量版本:

https://cloud.google.com/dataflow/

数据流已经支持BigQuery表格作为源和汇,并保持所有数据在Google的网络中。这种方法也适用于任意大的表格。

TableData.list你的整个表格可能适用于小型表格,但除了网络开销之外,绝对不建议中等大小的任何东西。

+0

谢谢肖恩。所以如果我理解正确的话:a)我们必须走出BQ才能有效地做到这一点。 b)数据流本质上是一种使用云存储和计算引擎的方式(理论上可以通过编程方式调用这两种方法而不是使用数据流)。正确?现在,Dataflow是否具有Restful API,还是我们必须使用Java来处理它?这会让事情变得过于复杂...... – user3688176

+0

对于你所描述的,云数据流似乎是最有效的手段。它们提供粘合和编排逻辑以并行处理BigQuery表,并将结果写入一个或多个输出表。您绝对可以直接通过与GCE,GCS和BigQuery进行交互来完成,但我认为您会发现它非常复杂。 W.r.t. dataflow的API,因为它运行着你的java代码,所以你需要与java API进行交互以实现并行处理。但是,我相信有稳定的管理API来触发执行等。 –