如何在 Google BigQuery 中执行 table 操作?

How to do table operations in Google BigQuery?

想要一些关于如何处理 Google BigQuery 中的 table 操作(重命名列)的建议。

目前,我有一个包装器可以执行此操作。我的 table 是按日期分区的。例如:如果我有一个 table 名称事实,我将有几个 table 名称:

fact_20160301

fact_20160302

fact_20160303...等等

我的重命名列包装器生成别名查询。 IE。如果我想改变我的 table 架构 ['address', 'name', 'city'] -> ['location', 'firstname', 'town']

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

并对父 table 执行 WRITE_TRUNCATE。

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

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

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

操作模式的最佳方式是通过 Google 大查询 API。

  1. 使用 tables get api 检索 table 的现有架构。 https://cloud.google.com/bigquery/docs/reference/v2/tables/get
  2. 操作您的架构文件、重命名列等
  3. 再次使用 api 对架构执行更新,将其设置为新修改的版本。这应该全部发生在一份工作中 https://cloud.google.com/bigquery/docs/reference/v2/tables/update

我可以提出两个方案

Using View

创建视图的脚本编写和执行非常简单 - 与使用 select into 方法扫描整个 table 的成本相比,它快速且免费。
您可以使用 Tables: insert API with properly set type 属性

创建视图

Using Jobs: insert EXTRACT and then LOAD

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

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