【问题标题】:How to get the job id of the last job run in BigQuery command line tool?如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?
【发布时间】:2025-12-26 19:15:12
【问题描述】:

我正在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 和它的状态部分。

【问题讨论】:

    标签: google-bigquery gcloud gsutil


    【解决方案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 docsbq 提供了全局标志--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从此。

    【讨论】: