【问题标题】:How to use the bq ls command line tool to sort by duration如何使用 bq ls 命令行工具按时长排序
【发布时间】:2019-12-26 01:02:51
【问题描述】:

如何使用bq ls 命令获得运行时间最长的 bq 作业?

我找不到如何对结果进行排序的示例

编辑:每个 cmets,如何使用 bigquery 日志查看正在运行的作业让我非常困惑。以这个 stackdriver 日志查询为例:

resource.type="bigquery_resource"
logName="projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.resourceName="projects/my-project/jobs/job_abc123"

那应该返回作业 job_abc123 的所有日志,对吗?好吧,我只返回一个带有protoPayload.methodName="jobservice.jobcompleted" 的条目,而protoPayload.status 是空白的。

那么我应该搜索哪些日志才能查看 job_abc123 的运行历史记录?如何使用 BQ SD 日志查看正在进行的查询及其当前运行时间?谷歌的文档很混乱,对我没有帮助

【问题讨论】:

  • 执行此操作的最简单方法是将所有 BigQuery 日志导出回 BigQuery 本身,然后只需编写一些 SQL。如果你想要一个 hacky/quick 的解决方案,你可以使用一些 bash 魔法。
  • 有没有办法创建一个接收器来自动做到这一点?还是您每次都必须手动执行此操作
  • 不,您需要创建接收器并在之后编写一些 SQL。您可以将 SQL 保存为视图,这样您只需执行一次。
  • 查看此链接如何自动化日志导出cloud.google.com/bigquery/docs/reference/auditlogs/…。它工作得很好,您可以使用调度程序或任何其他自动化工具来获得最长的查询
  • @TamirKlein 但审核日志是否显示当前正在运行的查询?这是如何运作的? SD 是否为每分钟或正在运行的某项工作写入日志?

标签: google-bigquery


【解决方案1】:

bq ls 命令本身不会按持续时间排序或显示运行时间最长的作业。这将需要您进行一些额外的处理。

以下是一些可能有用的注意事项:

  • 作业持续时间仅在作业完成或失败时更新,因此, 对于正在运行的作业,此字段将为空。另一种方法是 从当前日期时间中减去开始时间。
  • 使用 BigQuery API job list 可能会更容易 方法,因为输出是 JSON 格式,所以它应该是 解析更简单。
  • Stackdriver 日志仅显示以下类型的记录 作业:插入作业(创建作业时)、作业完成、获取查询 结果(当调用 get 方法检查作业状态时)。
  • 您可以为 bq 命令打开功能请求以启用排序 使用此form 按持续时间或开始时间。但考虑到一个 功能请求受到分类,可能不会被考虑 近期的发布计划。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多