BigQuery:如何使用bigquery.Client()。copy_table方法覆盖表

时间:2018-10-12 08:25:31

标签: google-bigquery

这是我用作https://cloud.google.com/bigquery/docs/managing-tables#bigquery-copy-table-python的参考代码:

source_dataset = client.dataset('samples', project='bigquery-public-data')
source_table_ref = source_dataset.table('shakespeare')

# dataset_id = 'my_dataset'
dest_table_ref = client.dataset(dataset_id).table('destination_table')

job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location='US')  # API request

job.result()  # Waits for job to complete.

在我的情况下,目标表存在,并且出现此错误:

Already Exists

如何使用此copy_table方法覆盖?在bq命令行中,我可以使用-f选项。所以我正在寻找相同的标志。

2 个答案:

答案 0 :(得分:2)

查看链接的文档:

  

configuration.copy.writeDisposition:指定目标表已经存在时发生的操作。

支持以下值:

  • WRITE_TRUNCATE:如果表已存在,则BigQuery会覆盖表数据。
  • WRITE_APPEND:如果该表已经存在,则BigQuery会将数据追加到该表中。
  • WRITE_EMPTY:如果表已经存在并包含数据,则作业结果中将返回“重复”错误

默认值为WRITE_EMPTY。

答案 1 :(得分:1)

您需要像这样将作业配置传递给请求:

job_config = bigquery.CopyJobConfig()
job_config.write_disposition = "WRITE_TRUNCATE"
job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    location='US',
    job_config=job_config)  # API request

更多文档在这里:https://googleapis.github.io/google-cloud-python/latest/bigquery/generated/google.cloud.bigquery.client.Client.copy_table.html