设置详情
用户和角色管理
default 用户;而应创建一个专用用户,仅供此 Fivetran
目标端使用。以下命令需使用 default 用户执行,将创建一个具有所需权限的
新 fivetran_user。
fivetran_user 对某些数据库的访问权限。
例如,执行以下语句后,我们将把访问权限限制为仅可访问 default 数据库:
高级配置
此配置完全可选。如果未上传文件,目标端将使用适合大多数使用场景的默认设置。
所有字段均为可选项。若未指定某个字段,则使用默认值。
如果某个值超出允许范围,目标端会在同步期间报告错误。
未知字段会被静默忽略 (会记录一条警告日志) ,且不会导致错误,这样在新增设置时可保持前向兼容性。
示例:
类型转换映射
- BINARY、XML、LOCALTIME 和 JSON 会存储为 String,因为 ClickHouse 的
String类型可以表示任意字节序列。目标端会添加列注释,以标明原始数据类型。ClickHouse 的 JSON 数据类型未在此处使用,因为它已被标记为已废弃,且从未推荐用于生产环境。 ** 注意:用于跟踪 LOCALTIME 类型支持情况的问题请参见:clickhouse-fivetran-destination #15。
日期和时间值范围
- INSTANT 的上限是 2262-04-11 23:47:16,因为 DateTime64(9) 将自纪元以来的纳秒存储为 int64,而 2^63 - 1 纳秒对应的正是这个日期。 ClickHouse 本身支持精度 <= 9 的 DateTime64,最高可达 2299-12-31 23:59:59。
- LOCALDATETIME 的上限同样受限于 2262-04-11 23:47:16,这是由于 Go ClickHouse 驱动中的一个已知 bug:在进行缩放之前,会对所有 DateTime64 精度调用
time.Time.UnixNano(),因此即使精度为 0,超过 2262 年的日期也会导致 int64 溢出。
目标表
SharedReplacingMergeTree) ,并以 _fivetran_synced 列作为版本列。
除主 (排序) 键和 Fivetran 元数据列外,每一列都会创建为
Nullable(T),其中 T 是根据
数据类型映射确定的 ClickHouse Cloud 类型。
表结构会因连接器中配置的 Fivetran
同步模式
而异:软删除 (默认) 或 历史模式 (SCD Type 2) 。
软删除模式
源表中只有一个主键
users 有一个主键列 id (INT) 和一个普通列 name (STRING) 。
目标表定义如下:
id 列作为表的排序键。
源表中存在多个主键
items 的主键列为 id (INT) 和 name (STRING) ,另外还有一个普通列 description (STRING) 。目标表将按如下方式定义:
id 和 name 列被选作表的排序键。
源表中没有主键
_fivetran_id 的唯一标识符列。
假设源中有一张 events 表,且只有 event (STRING) 和 timestamp (LOCALDATETIME) 两列。
这种情况下,目标表如下:
_fivetran_id 具有唯一性,且没有其他主键可选,因此将其用作表的排序键。
历史模式 (SCD Type 2)
_fivetran_start 列始终作为复合排序键的最后一个元素包含在 ORDER BY 子句中。
这使同一条记录的多个版本 (开始时间不同) 能够在表中共存。
当记录更新时:
- 先前版本的
_fivetran_end会被设置为新版本_fivetran_start减去一纳秒,同时_fivetran_active会被设置为false。 - 新版本会被插入,其中
_fivetran_active设为true,_fivetran_end设为2262-04-11 23:47:16.000000000(即DateTime64(9)的最大值) 。
源表中只有一个主键
users 有一个主键列 id (INT) ,以及普通列 name (STRING) 和 status (STRING) 。
历史模式下的目标表定义如下:
id 和 _fivetran_start 共同组成复合排序键。
经过几次同步后,该表中的数据可能如下所示:
记录
id=1 有两个版本:原始版本 (name 1,非活跃) 和更新后的版本 (name 11,活跃) 。
记录 id=2 只有一个版本,且当前为活跃状态。
源表中有多个主键
_fivetran_start 一同包含在 ORDER BY 中,其中 _fivetran_start 位于最后。
例如,源表 items 的主键列为 id (INT) 和 name (STRING) ,此外还有一个
普通列 description (STRING) 。历史模式下的目标表定义如下:
id、name 和 _fivetran_start 共同组成复合排序键。
源表中没有主键
_fivetran_id 的唯一标识列,
并将 _fivetran_start 追加到排序键中。
假设源中的 events 表只有 event (STRING) 和 timestamp (LOCALDATETIME) 两列。
历史模式下的目标表如下:
_fivetran_id 和 _fivetran_start 构成了复合排序键。
选择去重后的最新数据版本
SharedReplacingMergeTree 会在后台执行数据去重,
但仅会在不确定时间发生的合并过程中进行。
不过,也可以使用 FINAL 关键字临时查询去重后的最新数据版本:
网络故障时的重试
SharedReplacingMergeTree 表引擎处理。