You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery分区表全量删除疑问:每日CSV导入前如何正确操作?

BigQuery 删除全表数据及_PARTITIONTIME作用解答

选哪种方法?

如果你的需求是插入新数据前删除表中所有行,直接用方法1即可,方法2仅删除当天分区的数据,不符合你清空全表的要求。

两种方法差异

  • 方法1:DELETE FROM project.dataset.table WHERE true;
    该语句会删除表内所有分区的全部数据,完全匹配你“清空全表”的需求。但需注意:若表数据量较大,全表DELETE会扫描所有数据,可能产生较高费用,执行时间也更长。

  • 方法2:

    target_date = datetime.today().strftime('%Y-%m-%d') #ex. 2023-07-26
    DELETE FROM `project.dataset.table` WHERE DATE(_PARTITIONTIME) = '{target_date}'
    

    该语句仅删除当天分区的数据,其他日期的分区数据会保留,和你“删除所有行”的需求不匹配。

_PARTITIONTIME的作用

_PARTITIONTIME是BigQuery时间分区表的内置字段,用来标记每行数据所属的分区日期:

  • BigQuery会自动把数据按日期拆分到不同分区存储,核心作用是优化查询性能、降低成本——当你查询指定日期的数据时,只需扫描对应分区,无需遍历全表。
  • 对于按日分区的表,每行数据的_PARTITIONTIME默认取数据写入的日期;若你指定了自定义日期字段作为分区键,_PARTITIONTIME会和该字段的日期保持一致。

额外优化建议

如果你的场景是每日全量替换数据,更推荐用TRUNCATE TABLE project.dataset.table``来清空表:

  • TRUNCATE直接删除整个表的存储(分区表则删除所有分区),无需扫描全表数据,比DELETE效率更高、费用更低。

内容的提问来源于stack exchange,提问作者Lara19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:22:10