act*_*ner 12 export google-api google-cloud-storage google-bigquery
我在BigQuery中有一个数据集.该数据集包含多个表.
我正在使用BigQuery API以编程方式执行以下步骤:
查询数据集中的表 - 由于我的响应太大,我启用allowLargeResults参数并将响应转移到目标表.
然后,我将数据从目标表导出到GCS存储桶.
要求:
假设我的流程在第2步失败,我想重新运行这一步.
但在重新运行之前,我想检查/验证数据集中是否已存在名为"xyz"的特定目标表.
如果存在,我想重新运行第2步.
如果它不存在,我想做foo.
我怎样才能做到这一点?
提前致谢.
tar*_*eel 12
Alex F的解决方案适用于v0.27,但不适用于更高版本.为了迁移到v0.28 +,以下解决方案将起作用.
from google.cloud import bigquery
project_nm = 'gc_project_nm'
dataset_nm = 'ds_nm'
table_nm = 'tbl_nm'
client = bigquery.Client(project_nm)
dataset = client.dataset(dataset_nm)
table_ref = dataset.table(table_nm)
def if_tbl_exists(client, table_ref):
from google.cloud.exceptions import NotFound
try:
client.get_table(table_ref)
return True
except NotFound:
return False
if_tbl_exists(client, table_ref)
Run Code Online (Sandbox Code Playgroud)
这是一个python片段,它将告诉表是否存在:
def doesTableExist(project_id, dataset_id, table_id):
bq.tables().delete(
projectId=project_id,
datasetId=dataset_id,
tableId=table_id).execute()
return False
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想在此过程中删除表,则可以尝试:
def doesTableExist(project_id, dataset_id, table_id):
try:
bq.tables().get(
projectId=project_id,
datasetId=dataset_id,
tableId=table_id).execute()
return True
except HttpError, err
if err.resp.status <> 404:
raise
return False
Run Code Online (Sandbox Code Playgroud)
如果您想知道bq来自哪里,可以build_bq_client在此处致电:http://code.google.com/p/bigquery-e2e/source/browse/samples/ch12/auth.py
通常,如果您使用它来测试是否应该运行一个将修改表的作业,那么最好还是完成这项工作,并将其WRITE_TRUNCATE用作写入处置.
另一种方法可以是创建可预测的作业ID,并使用该ID重试作业.如果作业已存在,则作业已经运行(您可能需要仔细检查以确保作业未发生故障).
| 归档时间: |
|
| 查看次数: |
12996 次 |
| 最近记录: |