如何获取在 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 从 bq 命令行工具加载数据 - 如何跳过标题行
是否可以针对本地 BigTable 模拟器实例运行 BigQuery 命令行界面 (cli)?