Tableau Server 服务器增量提取详解

增量刷新的配置发生在 Desktop,调度的执行发生在 Server。本文是「落地配置篇」,按操作顺序讲一遍:从自定义 SQL 连接、设置增量字段,到发布数据源、在 Server 端排刷新计划,以及几个只有踩过才知道的坑。

如果你还不清楚全量刷新、增量刷新、子范围刷新在机制上的区别,先看姊妹篇 《Tableau 数据提取与刷新:增量、全量与子范围刷新详解》 ,再回来看这篇。

一句话结论:推荐每日增量刷新 + 每月末一次全量刷新;版本在 2024.2 以上、且标识列是日期类型时,可以用子范围刷新替代掉大部分全量刷新。

一、整体路径:五个步骤

增量刷新的落地路径:从 Desktop 到 Server 的五个步骤
  • 第一步 · 建连接:在 Desktop 连接数据库,双击数据表或写自定义 SQL。若自定义 SQL 中包含多个架构(schema),需要拆成多个连接。
  • 第二步 · 改提取:把默认的实时连接切换为数据提取。「行数」必须选择「所有行」——样本提取不能做增量刷新;启用聚合后,增量刷新同样不可用。
  • 第三步 · 设标识列:勾选「增量刷新」,指定用于标识新行的列。
  • 第四步 · 发布:切换到工作表标签页会触发首次提取,之后把数据源发布到 Server。
  • 第五步 · 排计划:发布成功后,在浏览器中编辑刷新计划。

分工要记住:标识列在 Desktop 端设定并随数据源发布;Server 端可调的是调度频率与刷新类型。 发布之后若标识列需要调整,仍要回到 Desktop 重新发布。

二、标识列怎么选

这一个选择,直接决定了你能不能用上子范围刷新。

增量字段怎么选:日期字段与自增 ID 的对比
  • 日期 / 日期时间字段:
    • 2024.1 起支持非唯一键,同一时刻可以有多行(比如日期,一天可以对应多个订单)。
    • 唯一能启用子范围刷新的类型(2024.2 起)。只有日期才能设置过去范围(比如每次刷新过去7天数据)。
  • 自增 ID / 整数列:每行取值唯一,边界清晰,也不受时间精度问题影响;但不能配置子范围刷新,历史行的修改只能靠定期全量刷新来补。
「增量字段」更准确的说法是:取值必须随写入单调递增。

反过来说:只要标识列不再递增(例如回填了更早的时间值),那部分数据增量刷新永远取不回来。这个问题就需要用“子范围刷新”来解决。

三、两个可选字段只能二选一

这是配置时最容易困惑的地方。

最小日期范围与高级设置的互斥关系
  • 「要刷新的最小日期范围」:2024.2 起提供,用来配置子范围刷新。填了数字和单位之后,「高级设置」会自动置灰。
  • 「高级设置」:2024.1 起提供,决定末行怎么处理——
    • 替换最后添加的行:先删除等于最高值的行,再取大于等于最高值的行,适配日期这类非唯一键列。
    • 保留最后添加的行:只取大于最高值的行,这是传统行为。

怎么选:

  • 标识列同一时刻会有多行(典型是日期)→ 关心的是「不漏掉同刻迟到的记录」,用高级设置。
    • 比如航空公司的航班日期都是日期(没有时间),希望下午更新当日的数据,相当于一天内的数据反复删除、覆盖,而非简单的追加。
  • 还想抓最近一段时间的历史修改 → 改用子范围刷新,末行逻辑交给 Tableau。
    • 比如,电商客户的订单会频繁更新(比如发货后更新发货时间、快递单号),通常订单会在7天内完成生命周期,因此可以设置“子范围刷新” = 7天。这样每天都会更新过去7天的全部数据(替换)

另有一条容易忽略的规则:一旦添加了筛选器,高级设置同样会被置灰,并强制使用「不替换最后添加的行」,以避免筛选条件与替换逻辑冲突。

四、时间戳精度陷阱

用高精度时间戳做标识列,是增量刷新最常见的翻车点。

时间戳精度陷阱:3 位小数截断导致重复行

数据引擎存储时间值时最多精确到 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