Google Apps 脚本 - 检查表是不是存在,如果存在则将其删除,检查删除作业是不是完成
Posted
技术标签:
【中文标题】Google Apps 脚本 - 检查表是不是存在,如果存在则将其删除,检查删除作业是不是完成【英文标题】:Google Apps Script - check if table exist, delete it if it does exist, check if the delete job finishedGoogle Apps 脚本 - 检查表是否存在,如果存在则将其删除,检查删除作业是否完成 【发布时间】:2018-07-19 23:45:16 【问题描述】:我正在尝试查找 Google Apps 脚本 -> 高级服务 -> BigQuery 的完整参考资料。 Apps Script BigQuery reference 只给出了一些样本,没有涵盖所有的方法。 我们应该检查方法参数的 API 引用。
这是我想做的事
-
检查表是否存在
如果存在则删除
检查删除作业是否完成
检查表是否存在
如果存在则删除
我找不到检查表是否存在的方法。所以我必须继续删除表(不管它是否存在),将删除包装在一个 try 块中。
try
var deleteResults = BigQuery.Tables.remove(project, dataset, table);
Logger.log(deleteResults);
catch (err)
//return false;
这是执行“检查表是否存在,如果存在则删除它”任务的正确方法吗?
检查删除是否完成
现在,我想知道这份工作是否开始于
BigQuery.Tables.remove(project, dataset, table);
已经完成,但Logger.log(deleteResults);
只记录了null
:
[18-07-19 14:12:24:927 PDT] null
所以BigQuery.Tables.remove
方法没有返回任何东西?如何知道删除作业是否完成?
【问题讨论】:
为什么不使用DROP TABLE IF EXISTS
声明?
但问题很可能会保持不变 - “我怎么知道删除作业是否完成?” :o)
【参考方案1】:
如文档中所述,“高级服务”只是相关 Google API 的包装器。因此,您不会在 Apps Script 中找到有关高级服务的文档,因为这些方法在相应的 API 页面上有详尽的详细说明。您可以使用编辑器内自动完成来确定方法签名,或关注Google's tips
您可以通过list
ing all tables in your project & dataset 确定表是否存在,然后检查相关属性(id
、friendlyName
、tableReference.tableId
等),或者直接尝试get
并处理相关错误(如果它不存在)。如果您的唯一目标是在它存在时将其删除,那么您的 try/catch 方法是最简单的。根据table#delete
的 API 文档,如果成功,您会得到一个空响应。
一个使用 BigQuery.Tables.list
方法的示例 Apps 脚本,该方法使用 partial responses 也就是 "fields"
可选参数:
function getAllTables(projectId, datasetId)
const options =
fields: "nextPageToken,tables(id,friendlyName,tableReference/tableId)"
// Collect all tables - there may be more than one page's worth!
const tables = [];
do
var search = BigQuery.Tables.list(projectId, datasetId, options);
options.pageToken = search.nextPageToken;
if (search.tables && search.tables.length)
Array.prototype.push.apply(tables, search.tables);
while (options.pageToken);
return tables;
通过patch
重命名的示例:
function renameTable(newName, projectId, datasetId, tableId)
// The fields and associated new values we're setting.
const resource = "friendlyName": newName;
var response = BigQuery.Tables.patch(resource, projectId, datasetId, tableId);
// Log the updated table metadata in Stackdriver.
console.log(response);
(如果您使用update
,则需要提供所需的完整表格,而不仅仅是您要更改的表格。)
【讨论】:
以上是关于Google Apps 脚本 - 检查表是不是存在,如果存在则将其删除,检查删除作业是不是完成的主要内容,如果未能解决你的问题,请参考以下文章
链接到 Google Apps 脚本中的另一个 HTML 页面
从工作表中的 Google Apps 脚本访问 BigQuery 时需要登录错误
如何使用 Google Apps 脚本将来自 Google 电子表格和 ScriptDB 的数据插入 BigQuery 表