在 Tableau 中,「数据提取」是很多业务用户容易混淆的概念。完全刷新、增量刷新、子范围刷新……这些术语听起来相似,背后的机制和适用场景却截然不同。本文带你一次理清三种数据提取方式的核心差异。
本文基于 最新版本官方文档,覆盖数据提取的三种形式、完整与增量刷新的核心差异、以及 2025.3 新增的「子范围刷新」特性。
📌 本文要点
① 实时连接查数据库,完整提取全量复制,增量提取只加新行
② 完整刷新是「替换」,增量刷新是「追加」,增量标识列是增量刷新的指南针
③ 纯增量刷新无法捕获历史修改,这是最大限制
④ 子范围刷新(2025.3+)在追加新行的同时重新提取最近 N 天的数据
⑤ 选择策略的核心依据:数据会不会修改历史记录?
一、三种数据连接方式
在 Tableau 中,连接数据有三种方式。理解它们的区别是理解提取刷新的前提:
flowchart TD
subgraph Src["📂 原始数据源"]
DB[(数据库)]
Excel[(Excel/CSV)]
Cloud[(云服务)]
end
subgraph Live["🔗 实时连接"]
L1[每次操作直接查数据库]
L2[数据始终最新]
L3[依赖网络与数据库性能]
end
subgraph Full["📦 完整提取"]
F1[一次性复制全部数据]
F2[保存为 .hyper 文件]
F3[断网也能分析]
end
subgraph Incr["📥 增量提取"]
I1[只复制新增行]
I2[速度快、资源消耗低]
I3[无法捕获历史修改]
end
DB -.->|数据量大时慢| Live
DB -->|快照 snapshot| Full
DB -->|只加新行| Incr
style Live fill:#f3e8ff,stroke:#7c3aed,color:#4c1d95
style Full fill:#fee2e2,stroke:#dc2626,color:#991b1b
style Incr fill:#dbeafe,stroke:#2563eb,color:#1e3a5f实时连接:每次操作都向数据库发送查询,数据始终最新。优点是一致性最高,缺点是依赖数据库性能和网络,大量并发可能拖慢源系统。适合数据量小或需要实时决策的场景。
完整提取:一次性把整个数据集复制到本地 .hyper 文件中,作为离线快照使用。断开数据库也能分析,但刷新时必须重新下载全部数据,耗时较长。
增量提取:只复制新增的行到已有提取中,速度最快。但只能追加不能修改已有数据——如果数据库会修改历史记录,需要配合「子范围刷新」。
核心区别一句话:实时连接查数据库,完整提取全量复制,增量提取只加新行。
flowchart LR
subgraph FullRefresh["🔄 完整刷新"]
FR1[触发刷新] --> FR2[清空 .hyper 文件]
FR2 --> FR3[从数据库读取全部行]
FR3 --> FR4[重建整个数据提取]
FR4 --> FR5["✅ 数据100%与源一致"]
end
subgraph IncrRefresh["⚡ 增量刷新"]
IR1[触发刷新] --> IR2[查找增量标识列
大于上次最大值的行]
IR2 --> IR3[仅复制这些新行]
IR3 --> IR4[追加到现有 .hyper]
IR4 --> IR5["✅ 数据变大,旧数据不动"]
end
FR1 -->|"耗时:长 ⏱️"| FRNote["全量替换
适合初次、重大变更"]
IR1 -->|"耗时:短 ⚡"| IRNote["只追加新行
适合定期增量更新"]
style FullRefresh fill:#fee2e2,stroke:#ef4444
style IncrRefresh fill:#dbeafe,stroke:#3b82f6二、完整刷新 vs 增量刷新与增量标识列
完整刷新(Full Refresh) 的逻辑是「替换」——每次刷新时,Tableau 清空整个 .hyper 文件,从数据库重新读取全部行重建提取。最终数据与源端 100% 一致,但全表扫描耗时较长。
增量刷新(Incremental Refresh) 的逻辑是「追加」——Tableau 记录上次提取时最后一行的位置(基于增量标识列),下次只提取该位置之后的新行追加到提取中。原有数据不动,速度极快。
根本差异:完整刷新是「替换」——删除旧的,下载全部新的。增量刷新是「追加」——保留旧的,只加新的。
增量标识列的工作原理
增量标识列(Incremental Key) 是增量提取的「指南针」——一个单调递增的列,Tableau 用它判断哪些行是新数据。常见选择:
flowchart LR
subgraph Legend["图例"]
L1[已提取数据]:::old
L2[新数据]:::new
end
subgraph DBState["数据库"]
D1["6月1日 订单"]:::old
D2["6月2日 订单"]:::old
D3["6月3日 订单"]:::old
D4["6月4日 订单 ✚"]:::new
D5["6月5日 订单 ✚"]:::new
end
subgraph ExtractBefore["第一次提取后"]
E1["6月1日 💾"]:::old
E2["6月2日 💾"]:::old
E3["6月3日 💾"]:::old
end
subgraph ExtractAfter["第二次增量提取后"]
A1["6月1日 💾"]:::old
A2["6月2日 💾"]:::old
A3["6月3日 💾"]:::old
A4["6月4日 ✚"]:::new
A5["6月5日 ✚"]:::new
end
D4 -->|"增量标识列
日期 > 提取中最大日期(6月3日)"| A4
D5 -->|"增量标识列
日期 > 提取中最大日期(6月3日)"| A5
D1 -.->|"如果6月1日的数据被修改了
增量刷新不会察觉 ❌"| Missed["⚠️ 修改丢失"]
classDef old fill:#f1f5f9,stroke:#94a3b8
classDef new fill:#dbeafe,stroke:#2563eb,stroke-width:2px
style Missed fill:#fef2f2,stroke:#ef4444,color:#991b1b- 日期/时间戳(如 created_at)
- 自增 ID(如 order_id)
- 版本号列
每次刷新时,Tableau 记录该列的最大值。下次刷新时,只提取所有「该列值 > 上次最大值」的行。新增行追加到现有提取末尾。
⚠️ 关键限制:增量刷新是「只追加(append-only)」操作。如果数据库修改了 2024-01-02 的一行数据(例如订单状态从「待付款」改为「已付款」),增量刷新不会更新提取中的这行——因为增量标识列的值没有变化,Tableau 不会触及其他「老行」。
三、子范围刷新:解决历史修改问题
子范围刷新(Sub-range Refresh) 是 Tableau 2025.3 引入的新功能。它在增量刷新的基础上,额外指定一个时间范围(如过去 7 天、90 天),在这个范围内的已有数据会被「删除并重新提取」,从而捕获可能发生的任何历史修改。
flowchart LR
subgraph Config["⚙️ 配置增量刷新"]
A1["选择增量标识列
(如:订单日期)"]
A2["设置子范围天数
(如:90天)"]
end
subgraph How["🔄 每次刷新时的执行逻辑"]
B1["① 读取增量标识列
找到上次最大值之后的新行"]
B2["② 额外删除并重新提取
最近 N 天的已有数据"]
B3["③ 合并结果
历史(范围外) + 新提取(范围内) + 纯新行"]
end
subgraph Result["✅ 最终效果"]
C1["新数据 → 被追加"]
C2["N 天内的修改 → 被修正"]
C3["N 天前的旧数据 → 不动"]
end
Config --> How --> Result
style Config fill:#f0f5ff,stroke:#3b82f6
style How fill:#fef3c7,stroke:#f59e0b
style Result fill:#ecfdf5,stroke:#10b981工作逻辑:
- 配置时:设置「自刷新日期起的最后 N 天」的数据将始终刷新。选择一个数字(如 90)和时间段(如「天」)。
- 刷新时:① 按照增量标识列追加纯新行 → ② 删除子范围内的已有数据并重新提取 → ③ 合并:历史(范围外) + 新提取(范围内) + 纯新行
- 时间解释:设置为「3 个月」时,4 月 1 日刷新会提取 4 月 1 天 + 前 3 个月约 91 天的数据;4 月 28 日刷新会提取 4 月 28 天 + 前 3 个月约 118 天的数据。
下面以销售订单场景为例,说明为什么需要子范围刷新:
flowchart TD
subgraph Scenario["📋 销售订单场景"]
direction TB
O1["订单 A
9:00 创建 → 待付款"]
O2["订单 B
10:00 创建 → 已付款"]
O3["订单 C
11:00 创建 → 发货中"]
end
subgraph Change["⏱️ 一小时后,订单状态变化"]
C1["订单 A
→ 已付款 ✅"]
C2["订单 B
→ 发货中 📦"]
C3["订单 C
→ 已签收 🎯"]
C4["还有新订单 D
→ 已创建 ✚"]
end
subgraph Refresh["⚡ 每小时增量刷新
(子范围 = 7天)"]
R1["① 追加新订单 D"]
R2["② 重新提取过去 7 天
全部订单的最新状态"]
R3["③ 提取中订单状态
与数据库保持同步 ✅"]
end
Scenario -->|时间推移| Change
Change --> Refresh
style Scenario fill:#f0f5ff,stroke:#3b82f6
style Change fill:#fef3c7,stroke:#f59e0b
style Refresh fill:#ecfdf5,stroke:#10b981四、如何选择适合你的策略
根据数据特征选择最合适的刷新策略:
flowchart TD
Start(["数据提取需要定期更新?"]) -->|"否"| Manual["手动刷新即可"]
Start -->|"是"| Q1{"数据源是否会
修改历史数据?"}
Q1 -->|"不会,只追加"| SimpleIncr["✅ 纯增量刷新
最快、最轻量"]
Q1 -->|"会修改历史"| Q2{"修改一般发生在
多久前?"}
Q2 -->|"仅最近几天/月"| SubRange["✅ 增量+子范围
例如 7~90 天"]
Q2 -->|"可能修改任意时间"| Both["✅ 增量日常 + 定期完整
例如每日增量+每周日完整"]
SimpleIncr -.->|"例:销售流水、日志"| Note1
SubRange -.->|"例:订单状态更新"| Note2
Both -.->|"例:客户资料修改"| Note3
style SimpleIncr fill:#dbeafe,stroke:#3b82f6
style SubRange fill:#d1fae5,stroke:#10b981
style Both fill:#fef3c7,stroke:#f59e0b只追加、不修改(日志、交易流水、传感器数据)→ 纯增量刷新,最快最轻量。
追加为主,偶有回溯修改(订单管理、审批流程)→ 增量+子范围(推荐 7~90 天),速度与准确性兼顾。
可能修改任意时间(客户管理系统)→ 增量日常 + 定期完整,如每日增量 + 每周日完整刷新。
五、关键术语速查
数据提取(Extract) 把原始数据库中的数据复制一份到 .hyper 文件中,作为离线快照。
完整刷新(Full Refresh) 删除整个提取,重新从数据库下载全部数据。
增量刷新(Incremental Refresh) 只复制新增的行到提取中,旧数据不动。
子范围刷新(Sub-range Refresh) 在增量刷新的基础上,额外删除并重新提取最近 N 天的已有数据。
增量标识列(Incremental Key) 用于判断哪些行是新数据的列(如日期、自增 ID)。
Hyper 文件 Tableau 新一代数据提取格式,取代旧版 .tde,支持更大数据量和更快查询。
No comments yet