S0DimColumn.cs 1.4 KB

12345678910111213141516171819202122232425
  1. namespace Admin.NET.Plugin.AiDOP.DataPlatform.S0Dim;
  2. /// <summary>
  3. /// dim 单列的声明式映射。
  4. ///
  5. /// 🔴 <see cref="JsonPath"/> **没有默认值、不可省略**(TenantIdColumn 除外):
  6. /// staging 的 <c>raw_data</c> 键是源表的**物理列名**(<c>MdpDbPullExecutor</c> 走 <c>SELECT *</c>
  7. /// 后按 DataTable 列名序列化),而实体属性名与物理列名并不总是一致。
  8. /// 典型反例:<c>AdoS0LocationMaster.DomainCode</c> 的物理列名是 <c>Domain</c>,
  9. /// 同表另有一个 132 行全为空串的影子列 <c>domain_code</c>;
  10. /// 任何 “属性名 → snake_case” 的自动推导都会静默取到空值且不报错。
  11. /// </summary>
  12. /// <param name="TargetColumn">dim 表列名。</param>
  13. /// <param name="Kind">取值方式。</param>
  14. /// <param name="JsonPath">源表**物理列名**(即 raw_data 的键)。<see cref="S0DimValueKind.TenantIdColumn"/> 时必须为 null。</param>
  15. /// <param name="Required">true 时生成 <c>IS NOT NULL</c> 过滤:取不到值的整行不进 dim(随后被行数对账捕获)。业务键列必须为 true。</param>
  16. /// <param name="Precision">仅 <see cref="S0DimValueKind.Dec"/> 使用。</param>
  17. /// <param name="Scale">仅 <see cref="S0DimValueKind.Dec"/> 使用。</param>
  18. public sealed record S0DimColumn(
  19. string TargetColumn,
  20. S0DimValueKind Kind,
  21. string? JsonPath = null,
  22. bool Required = false,
  23. int Precision = 18,
  24. int Scale = 6);