增量刷新的配置发生在 Desktop,调度的执行发生在 Server。本文是「落地配置篇」,按操作顺序讲一遍:从自定义 SQL 连接、设置增量字段,到发布数据源、在 Server 端排刷新计划,以及几个只有踩过才知道的坑。
如果你还不清楚全量刷新、增量刷新、子范围刷新在机制上的区别,先看姊妹篇 《Tableau 数据提取与刷新:增量、全量与子范围刷新详解》 ,再回来看这篇。
一句话结论:推荐每日增量刷新 + 每月末一次全量刷新;版本在 2024.2 以上、且标识列是日期类型时,可以用子范围刷新替代掉大部分全量刷新。
一、整体路径:五个步骤
- 第一步 · 建连接:在 Desktop 连接数据库,双击数据表或写自定义 SQL。若自定义 SQL 中包含多个架构(schema),需要拆成多个连接。
- 第二步 · 改提取:把默认的实时连接切换为数据提取。「行数」必须选择「所有行」——样本提取不能做增量刷新;启用聚合后,增量刷新同样不可用。
- 第三步 · 设标识列:勾选「增量刷新」,指定用于标识新行的列。
- 第四步 · 发布:切换到工作表标签页会触发首次提取,之后把数据源发布到 Server。
- 第五步 · 排计划:发布成功后,在浏览器中编辑刷新计划。
分工要记住:标识列在 Desktop 端设定并随数据源发布;Server 端可调的是调度频率与刷新类型。 发布之后若标识列需要调整,仍要回到 Desktop 重新发布。
二、标识列怎么选
这一个选择,直接决定了你能不能用上子范围刷新。
- 日期 / 日期时间字段:
- 2024.1 起支持非唯一键,同一时刻可以有多行(比如日期,一天可以对应多个订单)。
- 唯一能启用子范围刷新的类型(2024.2 起)。只有日期才能设置过去范围(比如每次刷新过去7天数据)。
- 自增 ID / 整数列:每行取值唯一,边界清晰,也不受时间精度问题影响;但不能配置子范围刷新,历史行的修改只能靠定期全量刷新来补。
「增量字段」更准确的说法是:取值必须随写入单调递增。
反过来说:只要标识列不再递增(例如回填了更早的时间值),那部分数据增量刷新永远取不回来。这个问题就需要用“子范围刷新”来解决。
三、两个可选字段只能二选一
这是配置时最容易困惑的地方。
- 「要刷新的最小日期范围」:2024.2 起提供,用来配置子范围刷新。填了数字和单位之后,「高级设置」会自动置灰。
- 「高级设置」:2024.1 起提供,决定末行怎么处理——
- 替换最后添加的行:先删除等于最高值的行,再取大于等于最高值的行,适配日期这类非唯一键列。
- 保留最后添加的行:只取大于最高值的行,这是传统行为。
怎么选:
- 标识列同一时刻会有多行(典型是日期)→ 关心的是「不漏掉同刻迟到的记录」,用高级设置。
- 比如航空公司的航班日期都是日期(没有时间),希望下午更新当日的数据,相当于一天内的数据反复删除、覆盖,而非简单的追加。
- 还想抓最近一段时间的历史修改 → 改用子范围刷新,末行逻辑交给 Tableau。
- 比如,电商客户的订单会频繁更新(比如发货后更新发货时间、快递单号),通常订单会在7天内完成生命周期,因此可以设置“子范围刷新” = 7天。这样每天都会更新过去7天的全部数据(替换)
另有一条容易忽略的规则:一旦添加了筛选器,高级设置同样会被置灰,并强制使用「不替换最后添加的行」,以避免筛选条件与替换逻辑冲突。
四、时间戳精度陷阱
用高精度时间戳做标识列,是增量刷新最常见的翻车点。
数据引擎存储时间值时最多精确到 3 位小数。源库里 17:30:56.502352 与 17:30:56.502852 是两条不同的记录,进入提取后都被截断成 17:30:56.502,于是出现重复行。
规避方式有三条:
- 在 SQL 里降到毫秒级:用
CAST或DATE_TRUNC把标识列统一截到 3 位小数以内。 - 改用自增 ID 做标识列:整数不涉及精度问题。
- 用「写入时刻」建列:官方建议基于记录何时被写入,而不是业务发生日期来做提取。
五、调度怎么排
- 每日增量:只取新行,秒级完成,源库压力最小。代价是抓不到历史行的改动,也发现不了源端的删除。
- 定期全量:与源端 100% 一致,补齐所有历史改动与删除。代价是全表扫描,大表可能要跑几个小时,不宜太频繁。
- 增量 + 子范围(2024.2+):每次额外重抽最近 N 天的已有行,覆盖绝大多数追溯修改,代价介于两者之间。
实践中的取舍:老版本用「每日增量 + 每月末全量」;2024.2 以上、标识列又是日期类型时,可以配置 90 天子范围,把全量刷新的频率降下来(例如降到每季度一次)。
判断依据始终只有一个:源端的改动,最多会回溯到多久以前 —— 子范围能覆盖住,就不必跑全量。
六、发布前后的几点经验
- 发布前整理字段:适当对字段做文件夹分组、补充常用的逻辑计算字段,能显著提高其他人使用这个数据源时的一致性。
- 做一个测试仪表板:发布后同步创建一个只显示「数据行数 + 关键度量值」的测试视图,每次刷新后扫一眼,是最便宜的校验方式。
- 别在本地堆超大提取:超大量的本地提取会耗用大量空间与时间,却带不来额外收益。超大数据量场景建议改用「空提取」技巧,先在 Server 端建一个空壳提取再刷新。
- 查看提取历史:在 Desktop 的「数据 > 数据提取 > 历史记录」里,可以看到每次刷新的时间、是全量还是增量、以及新增的行数,排查问题时很有用。
附:配置检查清单
- 「行数」选的是所有行,没有启用聚合
- 标识列取值随写入单调递增
- 若要用子范围刷新,标识列必须是日期或日期时间类型(2024.2+)
- 若标识列是高精度时间戳,已做截断处理
- 「最小日期范围」与「高级设置」只用了其中一个
- 源表结构变更过 → 先跑一次完全刷新
- 已创建测试仪表板,用于刷新后核对行数
- Server 端已配置每日增量 + 定期全量(或子范围)的调度
No comments yet