配置虚拟列

虚拟列用于在不修改底层表结构的情况下,为 Analytics Agent 增加一个更适合自然语言问答的派生字段。它可以把复杂表达式、字段拼接、业务标签或格式标准化逻辑封装成一个可理解的字段。

虚拟列不是 Lakehouse 物理表字段,而是分析域中的语义增强配置。创建后,应像普通字段一样继续补充别名、描述、字段类型和字段用途。


为什么需要虚拟列

底层数据表中的字段经常不完全符合业务用户的提问方式。例如:

现有字段用户想问的字段虚拟列价值
first_name
first_name
last_name
last_name
姓名、客户姓名拼接成完整姓名。
active_subscription
active_subscription
账户状态转换成“活跃/非活跃”标签。
latitude
latitude
longitude
longitude
地理位置拼接或派生成位置字段。
多个状态字段业务状态通过 CASE WHEN 生成更清晰的业务状态。

如果不创建虚拟列,模型每次都需要临时推断表达式,容易产生不一致 SQL。虚拟列可以把常用表达式固定下来。


适用场景

场景示例
字段拼接拼接
first_name
first_name
last_name
last_name
得到完整姓名。
业务标签根据
active_subscription
active_subscription
生成“活跃账户/非活跃账户”。
状态归一化把多个状态码转换成统一业务状态。
格式标准化统一大小写、去除空格、处理空值。
时间派生从时间戳中提取日期、月份、年份。
复杂表达式复用将经常使用的 CASE WHEN 或计算表达式封装为字段。

虚拟列尤其适合“用户经常问,但底层没有直接字段”的场景。


配置入口

进入虚拟列配置的一般路径:

  1. 进入 管理 -> 分析域管理
  2. 打开目标分析域。
  3. 进入 数据 页签。
  4. 点击
  5. 点击表展示名,进入表详情。
  6. 表结构 中新增或配置虚拟列。

不同页面版本的入口名称可能略有差异,但虚拟列通常出现在表字段配置区域。


实操验证案例

实际验证中,在账户表中创建了一个虚拟列,用于拼接姓名:

concat(first_name, ' ', last_name)

运行验证后,返回了类似结果:

  • Macy Kub
    Macy Kub
  • Kim Cormier
    Kim Cormier

保存后,该字段在表结构中显示为虚拟列。

这个案例说明:

  • 虚拟列表达式需要先运行验证。
  • 验证结果应检查样例值是否符合预期。
  • 保存后还需要补充字段语义配置,否则模型不一定知道它代表“完整姓名”。

常见写法

字段拼接

concat(first_name, ' ', last_name)

适合生成姓名、地区层级、编码加名称等字段。

空值处理

coalesce(country, '未知')

适合把空值转换成业务用户可理解的默认值。

分类标签

CASE WHEN active_subscription = TRUE THEN '活跃账户' ELSE '非活跃账户' END

适合把布尔值或状态码转换成业务标签。

时间派生

date_trunc('month', created_at)

适合生成月份、季度、年份等时间维度。

数值分层

CASE WHEN seats >= 100 THEN '大客户' WHEN seats >= 10 THEN '中型客户' ELSE '小客户' END

适合生成客户分层、金额分层、风险等级等业务维度。


配置后必须补字段语义

虚拟列创建成功后,只是增加了一个派生字段。要让 Analytics Agent 正确使用它,还需要配置字段语义。

配置项建议
字段别名写用户会说的业务名称,例如“客户姓名”“账户状态”“客户分层”。
字段描述说明虚拟列如何计算、适合什么问题。
字段类型根据结果选择分类、连续值、时间或其他类型。
字段用途判断它适合做维度、过滤还是度量。
隐藏状态如果只是中间字段,不希望用户直接使用,可以隐藏。

例如,姓名拼接虚拟列可配置为:

配置项示例
字段别名客户姓名、完整姓名
字段描述
first_name
first_name
last_name
last_name
拼接得到,用于展示或按姓名查询账户。
字段类型
CATEGORICAL
CATEGORICAL
字段用途
DIM
DIM
FILTER
FILTER

与字段语义的关系

虚拟列和字段语义应配合使用。

虚拟列解决字段语义解决
底层没有现成字段这个字段在业务上叫什么
表达式需要复用用户会怎么问
需要标准化取值字段适合做过滤、维度还是度量
需要派生标签字段是否应该被问答使用

如果只创建虚拟列,不配置语义,系统可能仍然无法稳定使用它。


与答案构建器的区别

虚拟列和答案构建器都能封装逻辑,但适用层级不同。

对比项虚拟列答案构建器
作用对象单个字段一段 SQL 模板
典型用途派生字段、标签、拼接、标准化多指标、JOIN、复杂口径、明细查询
是否参与表结构会作为字段出现在表结构中作为独立分析模板存在
问答使用方式像普通字段一样被选择作为可执行指标模板被调用

简单判断:

  • 如果只是“需要一个更好用的字段”,用虚拟列。
  • 如果是“需要一整套查询逻辑”,用答案构建器。

设计建议

1. 虚拟列应表达稳定业务含义

不要为一次性问题创建虚拟列。虚拟列适合稳定、复用频率高的字段。

推荐:

  • 完整姓名
  • 账户状态
  • 客户分层
  • 月份
  • 地区层级

不推荐:

  • 临时筛选条件
  • 一次性分析表达式
  • 与现有字段重复但没有更清晰语义的字段

2. 避免虚拟列过度嵌套

虚拟列表达式应保持清晰。如果逻辑过长、涉及多表或多个复杂聚合,应该考虑答案构建器,而不是虚拟列。

3. 注意空值和数据类型

创建虚拟列时应考虑:

  • 输入字段是否可能为空。
  • 字符串拼接是否会产生多余空格。
  • CASE WHEN 是否覆盖所有分支。
  • 输出类型是否符合预期。

4. 不要把敏感字段拼接成更易暴露的字段

如果底层字段包含手机号、邮箱、身份证等敏感信息,不应通过虚拟列把它们组合成更易被问答展示的字段。必要时应隐藏相关字段。


验证方法

虚拟列配置后,建议验证三件事:

验证项方法
表达式是否正确运行验证,看样例结果。
字段语义是否生效用自然语言提问,看系统是否使用虚拟列。
SQL 是否符合预期查看问答结果中的 SQL。

示例验证问题:

  • “展示几个客户姓名”
  • “按账户状态统计账户数”
  • “按客户分层查看活跃率”
  • “最近每个月新增账户数”

如果 SQL 没有使用虚拟列,通常需要检查别名、描述、字段类型和字段用途是否配置完整。


常见问题

问题可能原因处理建议
虚拟列验证失败SQL 表达式语法错误或字段名错误按底层数据源 SQL 语法修改表达式。
虚拟列结果为空输入字段为空或表达式没有处理空值使用
coalesce
coalesce
等函数处理空值。
问答不用虚拟列缺少别名、描述或字段用途补充字段语义后重新验证。
虚拟列出现在不合适的分组中字段用途配置不合理调整为过滤、度量或隐藏。
表达式过于复杂难维护虚拟列承担了查询模板职责改用答案构建器。
暴露了敏感信息虚拟列拼接了敏感字段隐藏字段或删除虚拟列,并检查权限配置。

上线前检查清单

  • 虚拟列表达式是否运行验证成功。
  • 样例结果是否符合业务预期。
  • 是否处理了空值。
  • 是否设置了业务化别名。
  • 是否补充了字段描述。
  • 字段类型是否正确。
  • 字段用途是否合理。
  • 是否会暴露敏感信息。
  • 是否用自然语言问题验证。
  • 是否查看 SQL 确认虚拟列被正确使用。

虚拟列的目标,是把底层表中”不方便用户直接理解或使用的表达式”变成 Analytics Agent 可以稳定理解的业务字段。

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询