Google Apps脚本-检查表是否存在,如果存在,则将其删除,检查删除作业是否完成

时间:2018-07-19 23:45:17

标签: google-apps-script google-bigquery

我正在尝试查找 Google Apps脚本->高级服务-> BigQuery 的完整参考资料。 Apps Script BigQuery reference仅提供了一些示例,并未涵盖所有方法。
我们应该检查API参考以获取方法的参数。

这就是我想要做的

  1. 检查表是否存在
  2. 删除它(如果确实存在)
  3. 检查删除作业是否已完成

检查表是否存在

删除它是否存在

我找不到检查表是否存在的方法。因此,我只需要继续删除表即可(无论它是否存在都没有关系),将删除内容包装在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方法什么都不返回?我怎么知道删除作业是否完成?

1 个答案:

答案 0 :(得分:2)

如文档中所述,“高级服务”只是相关Google API的包装。因此,您不会在Apps Script中找到有关高级服务的文档,因为方法在相应的API页面上进行了详细介绍。您可以使用编辑器中的自动完成功能或遵循Google's tips

确定方法签名

您可以通过listing all tables in your project & dataset确定表是否存在,然后检查相关属性(idfriendlyNametableReference.tableId等),或者只是尝试get并处理相关的错误(如果不存在)。如果您的唯一目标是删除它(如果存在),那么尝试/捕获方法最简单。根据{{​​3}}的API文档,如果成功,您将收到一个空响应。


示例使用table#delete方法的Apps脚本,该方法又使用BigQuery.Tables.list"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;
}

通过partial responses重命名的示例:

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,则需要提供完整的所需表,而不仅仅是提供您要更改的表。)