You need to enable JavaScript to run this app.
导航
唯一键去重配置
最近更新时间:2024.03.28 11:23:42首次发布时间:2024.03.28 11:23:42
1.功能概述

唯一键(Unique表):主要用于确保表中某一列或多列数据的唯一性,当为一列或多列设置唯一键时,插入或更新数据时会检查这些列的值是否已经存在,从而保证数据按照唯一键去重。

可视化建模输出节点,可以通过将指定的字段(列)设置为唯一键(Unique Key),实现数据写入时按照唯一键进行去重,在保证唯一过程中,可以设置去重的取值逻辑(如遇重复时,保留最新的结果或保留最原始的结果),按照需求保留想要的唯一结果值。

注意

该功能非默认开启功能,如需要使用请在部署时打开。

2.功能场景

场景1:用户有一张全量订单表,希望查询订单创建日期下最新订单状态的订单数据,对于历史过程数据没有需求。
alt

实现逻辑如下:

  • 方案1: 每天清洗全量数据进行去重,然后将订单创建时间作为分区,设置动态分区更新

    • 优势:只需要存在一份数据,资源消耗相对较少

    • 劣势:动态分区是覆盖写入,存储上存在性能限制

  • 方案2: 每天清洗全量数据进行去重,然后每天分区存储全量数据,查询时查最近一个分区

    • 优势:操作相对简单,去重逻辑相对好实现

    • 劣势:

      • 1. 存储成本增加,如需配置尽可能设置生命周期在较短范围内

      • 2. 分区无具体业务含义,下游查询时如按照分区日期查询可能查到重复数据,需约定按照全量逻辑查询,且每次查询要查询全量数据,查询性能较差(即分区限制最新分区,然后按照订单创建时间进行统计)

说明

综上概述: 方案2相对更灵活,但是VeCDP产品下游圈选组件适配比较复杂,且查询性能无法保证。


场景2:在场景1的基础上,用户希望存储订单每个状态首次变更的时间,即按照订单状态+订单更新时间分区排序取最早的值,但是表里面会记录订单变化的日志

实现逻辑:

  • 方案1:参照场景1的逻辑无法实现,没办法按照多级分区排序取值

  • 方案2:利用窗口函数排序取值,每天存储全量数据

概述: 该场景只能选择方案2,但存在下游查询适配的风险


说明

针对以上场景,如用户希望上述两个场景输出的结果数据作为明细数据,场景1-方案1可以支持配置,但是受限性能和分区限制;方案2则存在查询异常,因为明细数据档案要求数据结构为增量数据,标签或分群圈选组件筛选时统计日期等同于分区日期,用户使用时如选择非最近1天,最终结果可能数据异常。
alt

3.解决方案

基于增量更新且保证主键唯一的逻辑场景,又可以支持下游快速查询,支持唯一键(Unique表)配置能力,可实现:

  • 设置唯一键,并且可设置多个字段,如存在多个字段,则多个字段的组合结果进行去重唯一

  • 设置唯一键级别,支持全表唯一和分区级别唯一

  • 设置版本字段,支持按照某个字段进行排序取值,仅支持Date/DateTime类型字段

  • 设置版本排序,根据版本字段进行正序取值

注意:唯一键的逻辑是在分片(Sharding)基础上实现的,即相同节点内数据去重唯一

针对场景1:可设置订单创建日期为分区,订单ID为唯一键,设置分区粒度唯一
针对场景2:可设置订单创建日期为分区,订单ID+状态为唯一键,设置分区粒度唯一,版本时间为订单更新时间

4.操作步骤
步骤功能入口操作说明操作截图

1

可视化建模-新建数据集-高级配置

  1. 选择是否开启唯一键去重

  2. 开启后定义唯一键字段,最多选择3个

    仅支持short、int、long、string、date、timestamp 类型

    1. 限制:分片字段必须添加作为唯一键
  3. 设置唯一键级别,支持分区级别和表级别,分区级别即分区范围内按照唯一键去重,表级别则全表进行唯一键去重

    1. 限制:分区级别仅支持第一级分区
  4. 设置版本字段,非必填,当去重存在多个值的时候,可以选择一个参考字段进行排序取值,则版本字段即为参考字段,仅支持Date/Datetime类型

版本排序:系统默认根据版本字段正向排序,如需倒序则可以在前置算子节点生成排序字段

2- 选填VeCDP场景联动1. 仅支持VeCDP应用为普通数据集及明细数据配置唯一键,其余类型数据档案会默认配置相应数据结构

注意:唯一键去重功能首次初始化时涉及多分区数据导入,写入数据相对较慢,其次数据更新建议增量更新,避免导入的分区过多。

5.关联高阶能力说明

功能功能说明差异对比

静态分区

默认的数据写入方式,按照离线更新数据的方式,如果涉及多个分区的数据更新,此时仅会对最近一个分区数据的数据执行先清空分区再写入数据,历史分区只会增量导入数据

动态分区需要在高级配置中打开动态分区开关,涉及到数据更新的分区,都会执行先清空分区再写入数据的更新逻辑
唯一键(Unique表)根据唯一键字段及版本字段,寻找已有的唯一键字段并判断去重,执行更新操作(Upsert操作)