如何使用 AppScript 在 BigQuery 中将 Google 工作表持久化为表格

Posted

技术标签:

【中文标题】如何使用 AppScript 在 BigQuery 中将 Google 工作表持久化为表格【英文标题】:How to use AppScript to persist a google sheet as a table in BigQuery 【发布时间】:2021-10-13 11:48:14 【问题描述】:

我想使用 App 脚本将 BigQuery 中的 Google 表格内容保存为表格。

到目前为止,我们在 BigQuery 中创建了一个与 Google 表格同步的表“A”。然后我们创建一个 App 脚本,它查询表 A 并将其保存为表 B。该脚本与 Jun Kaneko's article Integrate Google Spreadsheet with Big Query by Apps Script 中描述的脚本非常相似。

这个解决方案效果很好,但是每次我们在google Sheet中更改表结构时,我们都必须创建一个新表A。因此,我想知道我们如何在 BigQuery 中没有表 A 的情况下将 Google 工作表的内容直接保存为表 B。查询应使用第一行作为列名,并将所有后续行作为内容。

【问题讨论】:

什么是A表?什么是B表?你的实际代码是什么?哪个部分不工作?我们如何重现您的问题(请提供minimal reproducible example)?请尽量方便我们为您提供帮助。 据我从您发布的文章中了解到,情况正好相反。 BigQuery 中的数据正在更新电子表格。您是否尝试过重现该场景?你在哪里停下来,你面临哪些问题?另外,请使用表格输出示例更新您的问题,并指出您要用于创建表格等的触发器。兄弟 感谢您的提问。为了更准确,让我们这样说:我们有一个带有 A - G 列的 google 表格,我们想要一个脚本,使用第一行作为字段名和下面的行作为内容/数据。那将如何运作?上面链接的教程在大查询中查询查询并将结果保存为 BigQuery 中的表。我们不想查询查询,而是保存 google sheet 的内容。感谢您的帮助! 【参考方案1】:

===== 编辑

考虑到来自 OP 的新信息,如果不创建新表或在每次更改时删除并重新创建,则无法执行。 BigQuery 上的表架构不是那么灵活,例如,您不能在不重新创建表的情况下添加新列。查看有关changing schemas的更多详细信息。

=====

有一种简单的方法可以执行您想要的操作,而无需编写 App Script。

只需使用 Google 电子表格作为信息源创建一个 BigQuery 表。这是执行此操作的本机方式。

这是执行此操作的过程:

创建您的 google 电子表格,定义列(您可以插入任何数据):

返回 BigQuery,创建您的数据集:

在数据集中,创建将源数据定义为DriveGoogle Sheet 的表。由于sheet的第一行是表头,所以在Advanced OptionsHeader rows to skip = 1中配置:

URI:

在 Bq 上:

最后,您将获得 BigQuery 上的数据,每次更改电子表格时都会更新:

如果您有任何疑问或问题,请告知。

【讨论】:

感谢@ewertonsvila,所描述的方式实际上就是我们今天的方式。此外,如果您在查询中使用非持久化表(应从 Tableau 请求),则我们有一个应用脚本可将表从 Google 工作表中持久化,因为存在访问问题。缺点是,每次更改 Google 表格中表格的格式时,都必须创建新表格。这就是为什么我想知道我们是否可以将 Google 表格直接保存到 BigQuery 表中。 抱歉,您提供的详细信息并未解释这些详细信息。很遗憾,您不能这样做。 BigQuery 上的表架构不是那么灵活,例如,您不能在不重新创建表的情况下添加新列。查看有关changing schemas的更多详细信息。

以上是关于如何使用 AppScript 在 BigQuery 中将 Google 工作表持久化为表格的主要内容,如果未能解决你的问题,请参考以下文章

应用脚本:如何在 Google Sheet 中返回 BigQuery-Request 的 TotalRows

使用分页时 BigQuery 找不到工作

应用脚本:对于 bigquery 的响应太大

如何从 Google App Script 中的文件运行保存的 Big Query 脚本? [关闭]

有没有办法使用 Google 应用程序脚本从 Bigquery 结果生成 Microsoft Excel?

将新的 Google 表格数据附加到 BigQuery 表中