想得到一些关于如何处理Google BigQuery中的表操作(重命名列)的建议。
目前,我有一个包装器来执行此操作。我的表按日期分区。例如:如果我有一个表名事实,我将有几个表命名为:
fact_20160301
fact_20160302
fact_20160303... 等等
我的重命名列包装器生成别名查询。 即,如果我想从["地址"、"名称"、"城市"] -> ["位置"、"名字"、"城镇"]
我做批量查询操作: select address as location, name as firstname, city as town
并对父表执行WRITE_TRUNCATE。
我的主要问题在于 BigQuery 仅支持 50 个并发作业。这意味着,当我提交批处理请求时,我一次只能执行大约 30 个分区,因为我想为正在运行的 ETL 作业保留 20 个位置。
另外,我还没有找到一种方法可以对批处理操作进行poll_job以查看批处理中的所有作业是否已完成。
如果有人有一些提示或技巧,我很想听听。
我可以提出两个选项
使用视图
视图创建脚本和执行非常简单 - 与使用select into
方法扫描整个表的成本相比,它是快速且免费的。
您可以使用表创建视图:使用正确设置的类型属性插入 API
使用作业:插入提取,然后加载
在这里,您可以将表提取到 GCS,然后使用调整后的架构将其加载回 GBQ
上述方法将 a) 消除查询(扫描)表的成本成本,b) 可以帮助解决限制。但可能不取决于表的实际数量和您可能具有的其他要求
操作模式的最佳方式是通过 Google Big Query API。
- 使用表 get api 检索表的现有架构。 https://cloud.google.com/bigquery/docs/reference/v2/tables/get
- 操作架构文件、重命名列等。
- 再次使用 api 对架构执行更新,将其设置为新修改的版本。这应该全部发生在一个作业中 https://cloud.google.com/bigquery/docs/reference/v2/tables/update