Schema 与语义类型
Schema 定义 LogicForm 可见的业务字段和关系;Schema Mapping 定义这些字段位于哪个物理数据源。二者必须分开配置。
Schema 契约
核心字段:
Schema 不接受 _id、_sid、sid、db、from、fromSQL 或 projections 作为 V2 语义契约。物理信息应写入 Schema Mapping。
Property 契约
Resolved Property 一定包含 id、primal_type 和 isArray。Schema 与 Property 的 id 必须唯一,Property name 也必须唯一。
Primal Type
Primal Type 是数据库和 Query 共同理解的基础值类别:
Semantic Type 在 Primal Type 之上表达业务含义。调用方应优先选择准确的 Semantic Type,而不是只关注底层值类型。
全部内置 Semantic Type
当前内置 20 个类型:
entity 和 object 当前都表示 object 关系并使用相同的结果填充行为;保留两个名称用于业务建模和兼容表达。
数组不需要单独 Semantic Type。例如标签数组应写成:
Date 类型规则
timestamp、date、start_date 和 end_date 共享:
- 日期字符串标准化;
- 绝对周期和
{ granularity, offset }相对周期; DTD、WTD、MTD、QTD、YTD;- 未来上界的 latest-data-date 截断;
granularity元数据。
可用粒度:second、minute、hour、day、week、month、quarter、year。
Object / Entity 关系
关系连接以源 object Property 的物理值对应目标 Schema 的唯一 ID Property。目标 Schema 必须有且只有一个 ID,两个 Schema 都必须有可用 Mapping。
直接输出 客户 时,结果为实体对象:
结果规则:
- scalar object 最多递归填充 5 层;
- array object 保留原顺序和重复值,只填充当前数组成员,不继续递归成员内部的 object;
- 找不到实体时返回同形状占位对象:ID 和
_id保留,字符串字段为缺失提示,其他标量为null,数组为空数组; - 直接输出 object 不等于关系路径分组;前者返回实体,后者读取目标字段。
Snapshot 时间语义
- snapshot Schema 必须恰好有一个
timestampProperty。 - 有 ID 的 snapshot Schema 表示同一实体在不同时间的版本。
- 无 ID 的 snapshot Schema 可作为根查询的数据观察集,但不能作为 object 关系的目标。
- 关系查询 snapshot 目标时,会同时约束实体身份和有效时间周期。
- 源时间粒度不能比目标 snapshot 粒度更粗。
旧字段 is_observation 和 is_snapshot 不是 V2 Schema 契约。
动态 Property udf.sql
udf.sql 是建模方提供的受信任物理 SQL 表达式。它不是终端用户输入,可能依赖数据库方言。动态 Property 在 LogicForm 中像普通 Property 一样被引用,但仍受 Mapping、权限和 Provider 能力约束。
可比较 Category
values必须是非空、无重复的字符串数组。direction必须为1或-1。- Query 中的值必须存在于
values。 $min、$max和范围比较按业务顺序计算。- comparable Property 不能是数组。
层级 Schema
内置 hierarchy 插件支持分段编码:
storage 可为:
compact:编码到当前层级结束;zero-padded:低层级部分用0补齐到总长度。
property 可使用 Property 名称或 ID,解析后统一为名称。每个 level 的 name 唯一、codeLength 为正整数,synonyms 可用于 $hierarchyLevel.args.level。
Schema Mapping
完整公开结构:
如果一个 Schema 有多个 Mapping,系统只会选择能够完整覆盖当前 Query、Groupby 和 Pred 的候选。相同优先级且同样匹配的候选会返回歧义错误,不依赖注册顺序猜测。任何调用方条件都不会因为 Mapping 不支持而被静默删除。

