如何在 Google BigQuery 中进行表操作?

Posted

技术标签:

【中文标题】如何在 Google BigQuery 中进行表操作?【英文标题】:How to do table operations in Google BigQuery? 【发布时间】:2016-03-15 17:40:03 【问题描述】:

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

目前,我有一个包装器来执行此操作。我的表按日期分区。 eg:如果我有一个表名事实,我将有几个表命名:

fact_20160301

fact_20160302

fact_20160303...等

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

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

并对父表执行 WRITE_TRUNCATE。

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

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

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

【问题讨论】:

这个带有“rename”和write_truncate的选择背后的用例是什么?听起来不太实用。了解您的案例将有助于回答您的问题 我们正在用 bigquery 替换 vertica。我们的团队有时会收到重命名列的请求,因此我们会在整个版块中重命名列,以免在他们查询特定列时中断任何上游或下游作业。 您考虑过使用视图吗?这是零成本与执行一种“选择进入”的方式,您需要为整个表扫描付费。不过还有一些编码:) 感谢您的建议,但不要认为意见会有所帮助。顺便说一句,你是 BQ-mate 的作者。伟大的扩展:)。我们所有从事 BQ 工作的团队都安装了它。 太棒了!很高兴它被广泛使用!谢谢! 【参考方案1】:

我可以提出两个选择

使用视图

创建视图的脚本和执行非常简单 - 与使用select into 方法扫描整个表的成本相比,它快速且免费。 您可以使用 Tables: insert API 创建视图并正确设置 type 属性

使用Jobs: insert EXTRACT 然后加载

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

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

【讨论】:

啊,好吧,这种方法现在很有意义。你知道它与查询加载相比有多快吗? 真的取决于你的数据/案例。很难提供具体的统计数据。只需尝试测试您的数据【参考方案2】:

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

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

【讨论】:

据我所知 - 这些 api 不支持列重命名:o(

以上是关于如何在 Google BigQuery 中进行表操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 中对大表进行排序?

如何在 Google 的 Bigquery 中获取最频繁的值

在 Google 表格中使用 BigQuery,如何授予其他用户按“刷新”的权限?

如何对一系列数据进行分组以在 GOOGLE BigQuery 中创建一个类别

在 Python 中运行 BigQuery SQL 查询,如何进行身份验证?

Google Bigquery - 查询无效