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

如何在BigQuery中仅检索指定时间范围内的硬删除记录?

仅检索BigQuery硬删除记录的方法

针对你的问题,直接给出解决方案:

  • 不管是近5分钟还是10分钟的硬删除记录,都可以通过时间旅行结合快照对比的方式获取,前提是你的表处于时间旅行保留窗口内(BigQuery默认保留7天,可按需配置更短/更长周期)。
  • 时间旅行本身会返回所有变更行,但通过对比「过去某一时间点的表快照」和「当前表」,就能筛选出仅被删除的记录。

具体实现方法

方法1:用EXCEPT DISTINCT快速筛选

适合小表或对性能要求不高的场景,直接对比两个快照的全量数据:

-- 检索近5分钟内的硬删除记录
SELECT *
FROM `your-project.your-dataset.your-table` FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 5 MINUTE)
EXCEPT DISTINCT
SELECT *
FROM `your-project.your-dataset.your-table`

把SQL中的INTERVAL 5 MINUTE改成INTERVAL 10 MINUTE,就能检索近10分钟的删除记录。

方法2:用主键关联(高效版)

如果表有主键(比如id),用LEFT JOIN对比主键性能更优,适合大表场景:

-- 检索近10分钟内的硬删除记录
WITH past_snapshot AS (
  SELECT id, * EXCEPT(id)
  FROM `your-project.your-dataset.your-table` FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 MINUTE)
),
current_data AS (
  SELECT id, * EXCEPT(id)
  FROM `your-project.your-dataset.your-table`
)
SELECT p.*
FROM past_snapshot p
LEFT JOIN current_data c ON p.id = c.id
WHERE c.id IS NULL

关键说明

  • 时间旅行的保留窗口决定了你能回溯的最长时间:如果你的表配置的保留期小于5/10分钟,就无法检索这段时间的删除记录。
  • 上述方法仅针对硬删除(行被完全移除),软删除场景(比如用is_deleted标记)逻辑不同,但你的场景不适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:42:46