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

如何获取BigQuery中每小时新增插入行并同步至MySQL等数据源

找出BigQuery表中新插入行的方法
  • 利用时间戳字段
    如果表里有记录插入时间的字段(比如insert_time),每次同步时记好上次同步的结束时间,下次查询就筛出insert_time大于这个时间的行。示例SQL:

    SELECT * FROM `your-project.your-dataset.your-table`
    WHERE insert_time > TIMESTAMP('2024-05-20 10:00:00')
    

    记得把上次同步的时间存在外部地方,比如MySQL的一个配置表,每次同步完就更新这个时间戳。

  • 开启变更捕获(CDC)功能
    给BigQuery表开启变更捕获后,系统会自动记录行的插入、更新、删除操作。可以通过元数据字段_CHANGE_TYPE和_CHANGE_TIMESTAMP筛选新增行:

    SELECT * EXCEPT(_CHANGE_TYPE, _CHANGE_TIMESTAMP)
    FROM `your-project.your-dataset.your-table`
    WHERE _CHANGE_TYPE = 'INSERT'
      AND _CHANGE_TIMESTAMP > TIMESTAMP('2024-05-20 10:00:00')
    

    注意开启后会额外存储变更元数据,要考虑存储成本。

  • 基于自增主键/唯一标识
    如果表有自增主键(比如id),每次同步时记录上次同步的最大ID,下次直接查id大于这个值的行。示例SQL:

    SELECT * FROM `your-project.your-dataset.your-table`
    WHERE id > 10000
    

    这种方法只适合主键严格递增的场景,要保证插入时ID不会重复或回退。

  • 用时间旅行对比快照
    利用BigQuery的时间旅行功能,对比两次同步时间点的表快照,找出差异的行。假设上次同步时间是t1,这次是t2,可以这么查:

    SELECT * FROM `your-project.your-dataset.your-table` FOR SYSTEM_TIME AS OF TIMESTAMP('t2')
    EXCEPT DISTINCT
    SELECT * FROM `your-project.your-dataset.your-table` FOR SYSTEM_TIME AS OF TIMESTAMP('t1')
    

    这种方法不需要表有额外字段,但要注意时间旅行的保留期限(默认7天,最多可延长到180天),数据量大时查询性能可能受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:47:05