t1,用于跟踪客户订单:
t1 将包含以下行:
表 schema
_id:来自 MongoDB 的主键doc:复制为 JSON 数据类型的 MongoDB 文档_peerdb_synced_at:记录该行上次同步的时间_peerdb_version:记录该行的版本;当该行被更新或删除时递增_peerdb_is_deleted:标记该行是否已删除
ReplacingMergeTree 表引擎
ReplacingMergeTree 表引擎家族将 MongoDB 集合映射到 ClickHouse 中。使用此引擎时,对于给定的主键 (_id) ,更新会被表示为插入该文档的较新版本 (_peerdb_version) ,从而能够以版本化插入的方式高效处理更新、替换和删除操作。
ReplacingMergeTree 会在后台异步去重。若要确保同一行不存在重复项,请使用 FINAL 修饰符。例如:
处理删除操作
_peerdb_is_deleted 列标记为已删除。通常,你会希望在查询中过滤掉这些行:
查询 JSON 数据
Query
Result
^ 运算符:
Query
Result
Dynamic 类型
Dynamic 类型。Dynamic 类型使 ClickHouse 在无需预先知道具体类型的情况下,也能存储任意类型的值。你可以用 toTypeName 函数验证这一点:
Query
Result
dynamicType 函数。请注意,同一字段名在不同行中可能对应不同的数据类型:
Query
Result
Query
Result
Query
Result
Query
Result
字段类型转换
sum 函数,就会得到以下错误:
CAST 函数或 :: 语法将该字段转换为合适的类型:
Query
Result
将 Dynamic 类型转换为其底层数据类型 (由
dynamicType 决定) 时,性能非常高,因为 ClickHouse 在内部已按底层类型存储该值。扁平化 JSON
常规视图
可刷新materialized view
FINAL 关键字的查询只会在刷新时运行一次,因此后续针对目标表的查询都不再需要使用 FINAL。
缺点是,目标表中的数据只能更新到最近一次刷新时的状态。对于许多使用场景,将刷新间隔设为几分钟到几小时,通常能在数据新鲜度和查询性能之间取得较好的平衡。
flattened_t1,无需使用 FINAL 修饰符:
增量materialized view
FINAL 修饰符,因为每次更新都会触发合并。相反,你可以在 materialized view 之上构建一个常规视图,在查询时对数据去重。
flattened_t1_final: