使用Python向BigQuery插入CSV数据时数据被覆盖问题排查
问题定位
原有数据被覆盖的直接原因是LoadJobConfig中write_disposition参数配置错误,你当前设置的bigquery.WriteDisposition.WRITE_TRUNCATE逻辑为:写入新数据前,先清空目标表的全部存量数据,仅保留本次加载的CSV内容,必然会导致旧数据被覆盖。
BigQuery 三种写入规则说明
BigQuery 加载任务支持三种写入行为,可根据业务场景选择:
WRITE_TRUNCATE:清空目标表所有存量数据后写入新数据,适合全量重刷表的场景WRITE_APPEND:完全保留目标表存量数据,将新数据追加到表末尾,是你当前追加CSV数据场景需要使用的配置WRITE_EMPTY:仅当目标表为空时才执行写入,若表内已有存量数据则直接抛出错误终止任务,适合做防误覆盖校验
修正后的配置代码
将job_config段替换为如下内容即可实现追加写入,不会覆盖原有数据:
job_config = bigquery.LoadJobConfig( source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, autodetect=True, write_disposition=bigquery.WriteDisposition.WRITE_APPEND )
提示:非明确需要全量替换表数据的场景,不要使用
WRITE_TRUNCATE配置,避免误删存量数据。
内容的提问来源于stack exchange,提问作者Dede Soetopo
相关产品推荐
相关产品推荐

