语义视图的组织与发现

建了很多语义视图之后,真正要的是让它们能被复用、能被信任:别人(包括未来的你)想要一个指标时,能找到已有的、不必重复造一个,而且看一眼就知道口径、敢直接用。组织和发现就是为这两件事服务的——组织决定指标好不好找(复用的前提),注释决定指标敢不敢用(信任的前提)。本文讲在当前产品能力下怎么做到。

复用与信任不会自动发生

语义视图目前没有内建的指标目录或跨视图搜索,能用的只有两个命令:

SHOW SEMANTIC VIEWS
SHOW SEMANTIC VIEWS
(只列视图名)和
DESC EXTENDED
DESC EXTENDED
(看单个视图的指标)。这意味着复用和信任得靠你建视图时的命名和注释挣来,不会自动有:

  • 命名规范让指标在
    SHOW
    SHOW
    的列表里能被定位——这是别人发现并复用它的前提。
  • COMMENT 让指标在
    DESC EXTENDED
    DESC EXTENDED
    里能被读懂口径——这是别人敢用它的前提。

下面用一个销售域示例演示怎么落地。视图怎么从业务问题设计出来见设计方法,本文只讲建好之后如何组织和暴露。

前置准备

CREATE TABLE doc_org_cust (cust_id INT, cust_name STRING, region STRING); CREATE TABLE doc_org_ord (order_id INT, cust_id INT, amount DECIMAL(12,2), status STRING, order_date DATE); INSERT INTO doc_org_cust VALUES (1,'Alice','华东'),(2,'Bob','华北'),(3,'Carol','华东'); INSERT INTO doc_org_ord VALUES (101,1,250.00,'已完成',DATE'2025-01-01'), (102,1,150.00,'已退款',DATE'2025-02-01'), (103,2,300.00,'已完成',DATE'2025-01-15');

按"一个分析主题一个视图"建三个视图,命名统一用

<业务域>_<主题>
<业务域>_<主题>
前缀,每个视图、维度、指标都写 COMMENT:

CREATE SEMANTIC VIEW sales_revenue TABLES ( customers AS doc_org_cust PRIMARY KEY (cust_id) COMMENT '客户表', orders AS doc_org_ord PRIMARY KEY (order_id) FOREIGN KEY (cust_id) REFERENCES customers COMMENT '订单表' ) DIMENSIONS ( customers.region AS customers.region COMMENT '客户所在地区', customers.customer_name AS customers.cust_name COMMENT '客户名称' ) METRICS ( orders.total_revenue AS SUM(orders.amount) COMMENT '销售总额(含退款订单)', orders.avg_order_value AS AVG(orders.amount) COMMENT '平均订单金额' ) COMMENT = '销售收入分析:按地区/客户看销售额,含退款口径'; CREATE SEMANTIC VIEW sales_fulfillment TABLES ( orders AS doc_org_ord PRIMARY KEY (order_id) COMMENT '订单表' ) DIMENSIONS ( orders.status AS orders.status COMMENT '订单状态(已完成/已退款)' ) METRICS ( orders.order_count AS COUNT(orders.order_id) COMMENT '订单数' ) COMMENT = '订单履约分析:按状态统计订单数'; CREATE SEMANTIC VIEW cust_overview TABLES ( customers AS doc_org_cust PRIMARY KEY (cust_id) COMMENT '客户表' ) DIMENSIONS ( customers.region AS customers.region COMMENT '客户所在地区' ) METRICS ( customers.customer_count AS COUNT(customers.cust_id) COMMENT '客户数' ) COMMENT = '客户概览:按地区统计客户数';

组织:一个分析主题一个视图

不要把所有表和指标塞进一个巨型视图。一个语义视图应对应一个清晰的分析主题(如"销售收入""订单履约""客户概览"),聚焦的视图更好维护、查询粒度也更可控。

拆分时遵循三条原则:

  • 一个主题一个视图:上面把收入、履约、客户拆成了三个独立视图,而不是一个大视图。
  • 会冲突的分支拆开:如果两组指标分属同一父表的不同一对多分支(如订单和地址),放进同一视图查询时会触发 chasm trap 报错。把它们拆到不同视图各自分析。详见关系建模与聚合粒度
  • 控制单视图的表数量:建议从 3-5 张核心表起步,验证准确后再扩展。

命名规范:让指标能被找到(复用)

复用的第一步是"别人能找到你建过的视图"。但

SHOW SEMANTIC VIEWS IN <架构名>
SHOW SEMANTIC VIEWS IN <架构名>
只给视图名:

SHOW SEMANTIC VIEWS IN public;

+-------------+-------------------+ | schema_name | table_name | +-------------+-------------------+ | public | cust_overview | | public | sales_fulfillment | | public | sales_revenue | +-------------+-------------------+

注意这个输出只有视图名,没有注释、没有指标列表,而且按名字字母序排列。这意味着视图名本身是你扫一眼能用上的唯一信息。统一的

<业务域>_<主题>
<业务域>_<主题>
前缀让同域视图在列表里自然聚在一起——上面
sales_revenue
sales_revenue
sales_fulfillment
sales_fulfillment
相邻,一眼能看出都是销售域。

注释:让指标敢被使用(信任)

找到视图后,使用者要判断"这个指标算的是不是我要的、敢不敢用"。能回答这个问题的只有

DESC EXTENDED
DESC EXTENDED

DESC EXTENDED sales_revenue;

+----------------------+----------------------------+----------------------------+ | column_name | data_type | comment | +----------------------+----------------------------+----------------------------+ | # detailed table information | | name | sales_revenue | | | comment | 销售收入分析:按地区/客户看销售额,含退款口径 | | | type | SEMANTIC VIEW | | | #logical tables | | customers | public.doc_org_cust | 客户表 | | primary key | cust_id | | | orders | public.doc_org_ord | 订单表 | | primary key | order_id | | | foreign key | cust_id REFERENCE customers(cust_id) | | | #dimensions | | customers.region | customers.region | 客户所在地区 | | customers.customer_name | customers.cust_name | 客户名称 | | #metrics | | orders.total_revenue | `sum`(orders.amount) | 销售总额(含退款订单) | | orders.avg_order_value | `avg`(orders.amount) | 平均订单金额 | +----------------------+----------------------------+----------------------------+

DESC EXTENDED
DESC EXTENDED
是唯一能看到指标和注释的命令。
comment
comment
列让每个指标自描述——比如
total_revenue
total_revenue
的注释写明了"含退款订单",使用者无需追代码就知道口径。所以建视图时:

  • 每个视图、维度、指标都写 COMMENT,指标的注释尤其要写清口径(包含/排除什么、按什么时间点)。没有注释的指标,事后基本无法辨识。
  • 维度和指标用业务术语命名,而不是物理列名缩写。

发现工作流:建新指标前先查有没有现成的

避免重复造轮子的关键动作,是在建一个新指标前先查一遍是不是已经有人建过。在现有能力下,这个流程是两步:

  1. SHOW SEMANTIC VIEWS IN <架构名>
    SHOW SEMANTIC VIEWS IN <架构名>
    列出视图,借命名前缀缩小到目标业务域。
  2. 对候选视图执行
    DESC EXTENDED
    DESC EXTENDED
    ,在
    #metrics
    #metrics
    段按注释确认是不是你要的指标和口径——若已有且口径一致,直接复用,不要再建一个。

这个流程在视图数量可控、命名和注释规范的前提下够用。但要清楚它的边界:没有"搜索指标名"的能力,视图很多时只能逐个

DESC
DESC

用治理弥补产品缺口

当语义视图增长到几十上百个,仅靠

SHOW
SHOW
+
DESC
DESC
翻找会变得低效。当前产品没有指标目录,建议用外部治理手段补齐:

  • 维护一份指标登记表(团队 wiki 或表格):记录每个指标名、所属视图、口径定义、负责人。新建视图时同步登记。
  • 配合统一的命名规范COMMENT 规范,让登记表、视图名、注释三者口径一致。

命名规范让

SHOW
SHOW
的结果可读,COMMENT 让
DESC
DESC
的结果可懂,外部登记表补上跨视图检索——三者配合是当前规模化使用语义视图的可行方式。

相关文档

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