我正在使用BigQuery client libraries来执行数据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()
我也尝试过这种格式:
query_config = bigquery.QueryJobConfig(
query_parameters=[
bigquery.job.WriteDisposition('WRITE_TRUNCATE')
]
)
但是两者当前都返回错误:
BadRequest:400个POST https://www.googleapis.com/upload/bigquery/v2/projects/my_project/jobs?uploadType=resumable: 缺少必需的参数
我可以写出我的数据并每次替换表吗?
答案 0 :(得分:0)
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)
您的代码唯一的变化是:
job_config = bigquery.job.LoadJobConfig()