如何查询在 bigquery 操作中提交的特定作业 ID
How to query a particular job id submitted in bigquery action
我一直在使用 google_cloud
向 big query
提交作业,以便将文件提取到 GCS
,如下所示:
dataset = self.bqClient.dataset(self.website_id)
table = dataset.table(table_name)
job_name = str(uuid.uuid4())
job = self.bqClient.extract_table_to_storage(
job_name, table, destination)
job.destination_format = "NEWLINE_DELIMITED_JSON"
job.compression = 'GZIP'
job.begin()
这里的作业id
或name
是uuid4
。基本上我在 queue
中收集这些工作 ids
并想稍后检查 job
是否处于 DONE
状态。我该怎么做?
我一直在寻找这个,但到目前为止还没有找到。我只能找到函数 - client.list_jobs()
但它是所有 jobs
的列表。我只想 query
或 search
一个特定的 job
.
您可以通过 name
属性过滤出您想要的工作。
假设您想要获取有关 id
为 "big name string job 1" 的工作的信息。您可以通过 运行:
从工作列表中过滤掉它
job_name = "big name string job 1"
job = [job for job in list(self.bqClient.list_jobs()) if job.name == job_name][0] # this will break if list is empty
print(job.state) # DONE or RUNNING
请确保尽可能更新客户端,目前我们使用的是版本 0.26.0
[编辑]:
您在评论中提到拥有 100 万个工作岗位。至于 运行 get job method, currently the API does so only when running the exists and the reload 方法,所以没有办法 运行 像 client.get_job(job_name)
.
不过,在 list_job
中,您可以像在 code 中一样发送参数 all_users
和 state_filter
,例如:
job_name = "big name string job 1"
job = [job for job in list(self.bqClient.list_jobs(all_users=False, state_filter='done')) if job.name == job_name][0]
仅列出在给定状态的客户端中授权的当前用户的作业。
如果仍然列出数百万,那么您仍然可以(有点 "hacky" 解决方案)直接从作业基础构造函数查询它,例如:
from google.cloud.bigquery.job import _AsyncJob
job = _AsyncJob(job_name, self.bqClient)
job.reload()
print(job.state) #RUNNING or DONE
这是运行一个client.get_job()
的间接方式。
这可能是 python 存储库的一个有趣的功能请求。
我一直在使用 google_cloud
向 big query
提交作业,以便将文件提取到 GCS
,如下所示:
dataset = self.bqClient.dataset(self.website_id)
table = dataset.table(table_name)
job_name = str(uuid.uuid4())
job = self.bqClient.extract_table_to_storage(
job_name, table, destination)
job.destination_format = "NEWLINE_DELIMITED_JSON"
job.compression = 'GZIP'
job.begin()
这里的作业id
或name
是uuid4
。基本上我在 queue
中收集这些工作 ids
并想稍后检查 job
是否处于 DONE
状态。我该怎么做?
我一直在寻找这个,但到目前为止还没有找到。我只能找到函数 - client.list_jobs()
但它是所有 jobs
的列表。我只想 query
或 search
一个特定的 job
.
您可以通过 name
属性过滤出您想要的工作。
假设您想要获取有关 id
为 "big name string job 1" 的工作的信息。您可以通过 运行:
job_name = "big name string job 1"
job = [job for job in list(self.bqClient.list_jobs()) if job.name == job_name][0] # this will break if list is empty
print(job.state) # DONE or RUNNING
请确保尽可能更新客户端,目前我们使用的是版本 0.26.0
[编辑]:
您在评论中提到拥有 100 万个工作岗位。至于 运行 get job method, currently the API does so only when running the exists and the reload 方法,所以没有办法 运行 像 client.get_job(job_name)
.
不过,在 list_job
中,您可以像在 code 中一样发送参数 all_users
和 state_filter
,例如:
job_name = "big name string job 1"
job = [job for job in list(self.bqClient.list_jobs(all_users=False, state_filter='done')) if job.name == job_name][0]
仅列出在给定状态的客户端中授权的当前用户的作业。
如果仍然列出数百万,那么您仍然可以(有点 "hacky" 解决方案)直接从作业基础构造函数查询它,例如:
from google.cloud.bigquery.job import _AsyncJob
job = _AsyncJob(job_name, self.bqClient)
job.reload()
print(job.state) #RUNNING or DONE
这是运行一个client.get_job()
的间接方式。
这可能是 python 存储库的一个有趣的功能请求。