语义视图能力与限制参考
本文集中说明语义视图当前版本支持的能力和已知限制,供你在设计视图或排查报错时查阅。每条限制都附最小复现 SQL 和真实报错。
功能概述
语义视图通过声明式定义把多表关系、维度和指标沉淀为业务语义层。但当前版本在指标定义、元数据回读、DDL 管理等方面存在一些边界。设计前先了解这些限制,可以避免"创建成功但查询出错"或"定义无法回读"这类问题。需要完整查询语法见查询语义视图,跨表关系的聚合粒度见语义视图关系建模与聚合粒度。
指标定义限制
指标只支持基础聚合函数(
COUNT、SUM、AVG、MIN、MAX)和条件聚合(COUNT(CASE WHEN ...))。以下三类指标定义不受支持。
派生指标(指标引用指标) —— 创建时即失败。
创建报错:
窗口函数指标 —— 创建不报错,但查询时失败。
视图能创建成功,但查询该指标时报:
算术表达式指标 —— 创建不报错,但结果错误。
MAX(col) - MIN(col)、SUM(col) / COUNT(col) 这类,单独查询时只返回第一个操作数的值(如 MAX-MIN 返回 MAX),运算不执行;与其他指标一起查询时直接报 CZLH-65000: Compiler internal error。
元数据子句限制
CREATE SEMANTIC VIEW 接受 FILTERS、WITH SYNONYMS、is_unique、is_time、enum_values 这些子句,但它们在当前 SQL 链路中没有可观测效果:
- 创建时被接受,不报错
- 但都不会出现在
输出中,创建后无法回读DESC EXTENDED
还不能作为FILTERS
的参数传入(传入报语法错误)semantic_view()
过滤请统一用
semantic_view() 外层的 WHERE 子句实现。这些子句更多是面向上层 AI/元数据工具的声明。
关系与查询限制
- 查询必须至少指定一个
或DIMENSIONS
,否则报METRICS
。table or view not found - semantic_view - 不能在同一次查询中组合来自两个无直接关系路径的分支的指标(chasm trap),会报
。No relationship found for table <表名> - 跨表查询的连接和聚合粒度由指标所在表驱动,关系建模直接影响结果正确性。详见语义视图关系建模与聚合粒度。
DDL 与管理限制
- 不支持
,报CREATE OR REPLACE SEMANTIC VIEW
。修改结构必须only view/stream/materialized view support replace
后重建。DROP
只支持ALTER SEMANTIC VIEW
,且新名称不能带 schema 前缀(带前缀报语法错误)。RENAME TO- 没有
、GET_DDL
、YAML 导出等回读完整定义的手段;SHOW CREATE SEMANTIC VIEW
/DESC SEMANTIC VIEW
命令存在但返回空,DESCRIBE SEMANTIC VIEW
(不加DESC
)也返回空。能读回结构的只有EXTENDED
,且它不含上面的元数据子句。DESC EXTENDED
创建行为
子句必填,TABLES
和DIMENSIONS
均可选(仅METRICS
也能创建成功)。TABLES- 视图已存在时
报CREATE SEMANTIC VIEW
;用already exists
跳过,或先执行IF NOT EXISTS
保证脚本幂等。DROP SEMANTIC VIEW IF EXISTS - 外键列与被引用列数据类型必须一致,否则报错,例如:
权限模型
语义视图只支持只读权限。
(或GRANT SELECT
,等同于 SELECT)可授予角色查询权限;创建者自动拥有ALL
。ALL- 不支持
/INSERT
/UPDATE
,DELETE
报GRANT INSERT ON SEMANTIC VIEW ...
。invalid action type INSERT
查看授权,返回列:SHOW GRANTS ON SEMANTIC VIEW <名称>
、granted_type
、privilege
、conditions
(值为granted_on
)、SEMANTIC_VIEW
、object_name
、granted_to
、grantee_name
、grantor_name
、grant_option
。granted_time
限制速查表
| 能力 | 状态 | 说明 / 报错 |
|---|---|---|
| 派生指标(指标引用指标) | 不支持 | 创建报 cannot resolve column |
| 窗口函数指标 | 不支持 | 创建成功、查询报 Compiler error |
| 算术表达式指标 | 不支持 | 单独查返回第一个操作数、混查报错 |
| FILTERS / SYNONYMS / is_unique / is_time / enum_values | 无可观测效果 | 创建接受、不进 DESC、不可回读 |
| chasm trap(兄弟分支指标组合) | 拦截报错 | No relationship found for table … |
| CREATE OR REPLACE | 不支持 | 须 DROP 后重建 |
| ALTER | 仅 RENAME TO | 不能带 schema 前缀 |
| 回读完整定义(YAML/DDL) | 无手段 | DESC SEMANTIC VIEW 返回空 |
| 仅 TABLES 创建 | 支持 | DIMENSIONS / METRICS 可选 |
| 权限 | 只读 | SELECT / ALL;无 INSERT / UPDATE / DELETE |
排错速查(按症状)
遇到报错或结果不对时,按下面的症状定位原因。
| 症状 / 报错 | 原因 | 对策 |
|---|---|---|
创建报 | 指标引用了另一个指标(派生指标) | 复合计算放到外层 SQL |
查询报 | 用了窗口函数指标,或算术指标与其他指标混查 | 改用基础聚合,复合计算放外层 SQL |
创建报 | 外键列与被引用列类型不一致 | 改用类型一致的列,或显式指定引用列 |
查询报 | 组合了两个无直接关系路径的分支指标(chasm trap) | 拆成多次查询,每次只取一条关系链上的指标 |
查询报 | 没传任何 DIMENSIONS/METRICS | 至少指定一个维度或指标 |
创建报 | 视图已存在 | 加 ,或先 |
创建报 | 用了 | 不支持,改为 后重建 |
返回空 | 没加 ,或用了 | 用 |
返回空 | 不支持 过滤 | 去掉 LIKE,全列后自行筛选 |
设的 / 读不回 | 元数据子句无可观测效果 | 当前预期行为,以创建脚本为定义来源 |
| 跨表指标数值偏大/重复 | 手写 JOIN 导致扇出双重计算 | 用语义视图自动按指标粒度聚合,不要手写 JOIN |
| 维度成员缺失(如某客户不出现) | 该成员在指标表里没有事实行 | 需要全集时直接查维度表,详见关系建模与聚合粒度 |
相关文档
联系我们
