将 BigQuery 表替换为 API 作业

Ben*_*n P 3 google-bigquery

我正在使用BigQuery 客户端库执行数据 ETL jpb,然后将数据加载回 BigQuery。

我想每次都覆盖目标表,但目前我的代码每次运行时都会将新数据附加到表中。我已阅读有关 job_config 的文档,并使用它来设置查询参数,但我不知道如何为查询设置写入配置。

这是我到目前为止所尝试过的:

roc_df = pd.DataFrame(roc_score)

job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE

dataset_ref = client.dataset('Customers')
table_ref = dataset_ref.table('propensity_scores_test')

client.load_table_from_dataframe(roc_df, table_ref, job_config=job_config).result()
Run Code Online (Sandbox Code Playgroud)

我也尝试过这种格式:

query_config = bigquery.QueryJobConfig(
    query_parameters=[
        bigquery.job.WriteDisposition('WRITE_TRUNCATE')
    ]
)
Run Code Online (Sandbox Code Playgroud)

但目前两者都返回错误:

BadRequest:400 POST https://www.googleapis.com/upload/bigquery/v2/projects/my_project/jobs?uploadType=resumable:缺少必需的参数

我可以每次都写出数据并替换表格吗?

Tla*_*zal 9

load_table_from_dataframe方法使用LoadJobConfig。这是一段工作代码片段:

from google.cloud import bigquery
import pandas as pd

roc_df = pd.DataFrame([{"firstName": "Foo", "lastName": "Bar"}])

client = bigquery.Client()

dataset_ref = client.dataset('my_dataset')
table_ref = dataset_ref.table('my_table')

job_config = bigquery.job.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE

client.load_table_from_dataframe(roc_df, table_ref, job_config=job_config)
Run Code Online (Sandbox Code Playgroud)

您的代码的唯一变化是:

job_config = bigquery.job.LoadJobConfig()
Run Code Online (Sandbox Code Playgroud)