如何在Google BigQuery中执行表格操作?

时间:2016-03-15 17:40:04

标签: google-api google-bigquery

想知道如何处理Google BigQuery中的表操作(重命名列)。

目前,我有一个包装器来执行此操作。我的表按日期分区。例如:如果我有一个表名,我会有几个名为:

的表

fact_20160301

fact_20160302

fact_20160303 ... etc

我的重命名列包装器生成别名查询。即。如果我想更改我的表架构 ['地址','名称','城市'] - > [' location',' firstname',' town']

我做批量查询操作:     select address as location, name as firstname, city as town

并在父表上执行WRITE_TRUNCATE。

我的主要问题在于BigQuery仅支持50个并发作业。这意味着,当我提交批处理请求时,我一次只能执行大约30个分区,因为我想为正在运行的ETL作业保留20个位置。

此外,我还没有找到一种方法,您可以在批处理操作中执行poll_job,以查看批处理中的所有作业是否都已完成。

如果有人有一些提示或技巧,我很乐意听到它们。

2 个答案:

答案 0 :(得分:3)

我可以提出两个选项

  

使用视图

创建视图非常简单,可以快速自由地与使用select into方法扫描整个表格的成本进行比较。
您可以使用Tables: insert API通过正确设置type属性

来创建视图
  

使用Jobs: insert EXTRACT然后加载

在这里,您可以将表提取到GCS,然后将其加载回具有调整后架构的GBQ

以上方法将a)消除查询(扫描)表的成本成本,b)可以帮助限制。但可能不取决于表格的实际数量和您可能有的其他要求

答案 1 :(得分:0)

操纵架构的最佳方式是通过Google Big Query API。

  1. 使用表格获取api来检索表格的现有架构。 https://cloud.google.com/bigquery/docs/reference/v2/tables/get
  2. 操纵您的架构文件,重命名列等。
  3. 再次使用api对架构执行更新,将其设置为新修改的版本。这应该都发生在一个作业https://cloud.google.com/bigquery/docs/reference/v2/tables/update