如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?

Posted

技术标签:

【中文标题】如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?【英文标题】:How to get the job id of the last job run in BigQuery command line tool? 【发布时间】:2019-08-21 02:57:20 【问题描述】:

我正在bq 中运行一些命令来将数据从 BigQuery 提取到 GCS。我能够达到目标结果。

我能够查询数据并能够以所需格式将数据放入 GCS。我只是想知道是否有任何可能的方法来获取上一份工作的工作 ID 及其状态。我知道我们可以使用bq 工作列表方法获取所有工作详细信息,但它给了我一个完整的结果集。我只是想了解该工作的状态。

bq --location=US extract --destination_format CSV --compression GZIP dataset_id.table_name gs://bucket_name/table.csv

bq ls -j -n 1

jobId          Job Type    State      Start Time      Duration
job_id         extract    FAILURE   30 Mar 13:36:54   0:00:29

我只想要最后一个工作 ID 和它的状态部分。

【问题讨论】:

【参考方案1】:

我只想要最后一个工作 ID 和它的状态部分。

您可以通过管道将其发送到awk:

bq ls -j -n 1 | awk 'if(NR>2)print' | awk 'print $1,$3'

bquxjob_69ed4f1_169ba1f5665 SUCCESS

【讨论】:

感谢@Graham 工作完美。我正在寻找表和数据集部分,我们如何检查项目中是否存在表和数据集。 bq 工具是否提供了检查其可用性的方法? 请注意,如果您刚刚运行的作业是最近的作业,则此方法有效——如果存在竞争条件(例如,您开始作业,其他人或其他进程在您没有意识到的情况下开始作业,然后运行此命令),这可能不会按预期运行。【参考方案2】:

查看the docs,bq 提供了全局标志--job_id,它允许您为要启动的作业设置ID(在本例中,通过extract 命令)。他们甚至有a section about best practices around generating a job id。

创建作业后,您可以使用 bq show --job MY_JOB_ID_HERE 获取该特定作业的详细信息。

如果您不想自己生成作业 ID,一个更 hacky 的方法是让 bq 使用全局 --apilog stdout 选项打印出 API 调用,然后您可能会解析作业 ID从此。

【讨论】:

以上是关于如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 命令行工具 - 使用查询附加到表

BigQuery 从 bq 命令行工具加载数据 - 如何跳过标题行

是否可以针对本地 BigTable 模拟器实例运行 BigQuery 命令行界面 (cli)?

Bigquery 命令行工具,用于从文件中读取长查询字符串

如何在文件中从SQL源创建BigQuery视图(Windows命令行)

如何在 BQ 命令行中设置 Bigquery 需要分区过滤器