@clickzetta/cz-cli-darwin-arm64 0.3.40 → 0.3.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/bin/cz-cli +0 -0
  2. package/bin/skills/clickzetta-app-python-sdk/SKILL.md +153 -0
  3. package/bin/skills/clickzetta-app-python-sdk/eval_cases.jsonl +12 -0
  4. package/bin/skills/clickzetta-app-python-sdk/references/bulkload.md +196 -0
  5. package/bin/skills/clickzetta-app-python-sdk/references/connector.md +143 -0
  6. package/bin/skills/clickzetta-app-python-sdk/references/realtime.md +122 -0
  7. package/bin/skills/clickzetta-batch-sync-pipeline/SKILL.md +128 -287
  8. package/bin/skills/clickzetta-bi-connect/SKILL.md +176 -0
  9. package/bin/skills/clickzetta-bi-connect/eval_cases.jsonl +5 -0
  10. package/bin/skills/clickzetta-bi-connect/references/bi-tools.md +170 -0
  11. package/bin/skills/clickzetta-cdc-sync-pipeline/SKILL.md +633 -0
  12. package/bin/skills/clickzetta-cdc-sync-pipeline/eval_cases.jsonl +5 -0
  13. package/bin/skills/clickzetta-data-ingest-pipeline/eval_cases.jsonl +5 -0
  14. package/bin/skills/clickzetta-data-science/SKILL.md +125 -0
  15. package/bin/skills/clickzetta-data-science/eval_cases.jsonl +12 -0
  16. package/bin/skills/clickzetta-data-science/references/bitmap-profile.md +146 -0
  17. package/bin/skills/clickzetta-data-science/references/data-patterns.md +110 -0
  18. package/bin/skills/clickzetta-data-science/references/setup.md +160 -0
  19. package/bin/skills/clickzetta-data-science/references/stats-functions.md +195 -0
  20. package/bin/skills/clickzetta-data-science/references/write-and-infer.md +122 -0
  21. package/bin/skills/clickzetta-data-science/references/zettapark-api.md +156 -0
  22. package/bin/skills/clickzetta-data-sharing/SKILL.md +160 -0
  23. package/bin/skills/clickzetta-data-sharing/eval_cases.jsonl +3 -0
  24. package/bin/skills/clickzetta-data-sharing/references/share-ddl.md +134 -0
  25. package/bin/skills/clickzetta-dw-modeling/SKILL.md +103 -11
  26. package/bin/skills/clickzetta-dynamic-table/SKILL.md +58 -2
  27. package/bin/skills/clickzetta-dynamic-table/dynamic-table-alter/SKILL.md +4 -4
  28. package/bin/skills/clickzetta-external-catalog/SKILL.md +123 -0
  29. package/bin/skills/clickzetta-external-catalog/eval_cases.jsonl +5 -0
  30. package/bin/skills/clickzetta-external-catalog/references/external-catalog-ddl.md +130 -0
  31. package/bin/skills/clickzetta-file-import-pipeline/SKILL.md +34 -0
  32. package/bin/skills/clickzetta-java-sdk/SKILL.md +186 -0
  33. package/bin/skills/clickzetta-java-sdk/eval_cases.jsonl +12 -0
  34. package/bin/skills/clickzetta-java-sdk/references/bulkload.md +163 -0
  35. package/bin/skills/clickzetta-java-sdk/references/realtime.md +212 -0
  36. package/bin/skills/clickzetta-kafka-ingest-pipeline/SKILL.md +31 -0
  37. package/bin/skills/clickzetta-metadata/SKILL.md +28 -30
  38. package/bin/skills/clickzetta-oss-ingest-pipeline/SKILL.md +39 -0
  39. package/bin/skills/clickzetta-pipeline-review/SKILL.md +377 -0
  40. package/bin/skills/clickzetta-realtime-sync-pipeline/SKILL.md +323 -0
  41. package/bin/skills/clickzetta-realtime-sync-pipeline/eval_cases.jsonl +5 -0
  42. package/bin/skills/clickzetta-semantic-view/SKILL.md +207 -0
  43. package/bin/skills/clickzetta-semantic-view/eval_cases.jsonl +12 -0
  44. package/bin/skills/clickzetta-semantic-view/references/semantic-view-reference.md +167 -0
  45. package/bin/skills/clickzetta-spark-flink-connector/SKILL.md +92 -0
  46. package/bin/skills/clickzetta-spark-flink-connector/eval_cases.jsonl +5 -0
  47. package/bin/skills/clickzetta-spark-flink-connector/references/flink.md +147 -0
  48. package/bin/skills/clickzetta-spark-flink-connector/references/spark.md +132 -0
  49. package/bin/skills/clickzetta-sql-pipeline-manager/SKILL.md +115 -9
  50. package/bin/skills/clickzetta-sql-syntax-guide/SKILL.md +249 -0
  51. package/bin/skills/clickzetta-sql-syntax-guide/eval_cases.jsonl +3 -0
  52. package/bin/skills/clickzetta-sql-syntax-guide/references/ddl-reference.md +350 -0
  53. package/bin/skills/clickzetta-sql-syntax-guide/references/dml-reference.md +279 -0
  54. package/bin/skills/clickzetta-sql-syntax-guide/references/dql-reference.md +504 -0
  55. package/bin/skills/clickzetta-sql-syntax-guide/references/functions-reference.md +372 -0
  56. package/bin/skills/clickzetta-sql-syntax-guide/references/migration-databricks.md +260 -0
  57. package/bin/skills/clickzetta-sql-syntax-guide/references/migration-snowflake.md +382 -0
  58. package/bin/skills/clickzetta-sql-syntax-guide/references/vs-snowflake.md +346 -0
  59. package/bin/skills/clickzetta-sql-syntax-guide/references/vs-spark.md +229 -0
  60. package/bin/skills/clickzetta-studio-task-manager/SKILL.md +652 -0
  61. package/bin/skills/clickzetta-table-lineage/SKILL.md +90 -0
  62. package/bin/skills/clickzetta-table-lineage/eval_cases.jsonl +1 -0
  63. package/bin/skills/clickzetta-table-lineage/references/normalize_func.sql +14 -0
  64. package/bin/skills/clickzetta-table-lineage/references/table_cost.sql +38 -0
  65. package/bin/skills/clickzetta-table-lineage/references/table_lineage_standalone.html +562 -0
  66. package/bin/skills/clickzetta-table-lineage/references/table_relation.sql +25 -0
  67. package/bin/skills/clickzetta-zettapark/SKILL.md +248 -0
  68. package/bin/skills/clickzetta-zettapark/eval_cases.jsonl +12 -0
  69. package/bin/skills/clickzetta-zettapark/references/zettapark-api.md +283 -0
  70. package/package.json +1 -1
  71. package/bin/skills/clickzetta-ai-vector-search/SKILL.md +0 -160
  72. package/bin/skills/clickzetta-ai-vector-search/eval_cases.jsonl +0 -4
  73. package/bin/skills/clickzetta-ai-vector-search/references/vector-search.md +0 -155
@@ -0,0 +1,323 @@
1
+ ---
2
+ name: clickzetta-realtime-sync-pipeline
3
+ description: |
4
+ 创建和管理 ClickZetta Lakehouse 实时同步任务(单表),将外部数据源的数据实时同步到 Lakehouse。
5
+ 支持 Kafka、MySQL、PostgreSQL 等数据源作为来源端,Lakehouse 作为目标端。
6
+ 实时同步任务为持续运行的流式任务,无需配置调度策略,提交后即持续运行。
7
+ 当用户说"Studio 实时同步"、"realtime sync"、"单表 CDC 同步"、"实时数据同步"、"Kafka 实时同步到 Lakehouse"、
8
+ "MySQL 单表实时同步"、"单表实时同步"、"实时数据迁移"时触发。
9
+ 包含实时同步任务创建、数据源配置、字段映射(含 JSONPath 计算列)、部署运维等
10
+ ClickZetta Studio 特有逻辑。
11
+ Keywords: real-time sync, single table, Kafka source, MySQL source, streaming
12
+ ---
13
+
14
+ # 实时同步(单表)Pipeline 工作流
15
+
16
+ ## 向导:收集必要信息
17
+
18
+ 开始创建实时同步任务前,优先使用交互式问答工具(如 `question`)收集以下信息并弹出选项菜单;若无此类工具,则用文字一次性列出所有问题:
19
+
20
+ ```
21
+ question({
22
+ questions: [
23
+ {
24
+ question: "数据源类型?",
25
+ options: [
26
+ { label: "Kafka", description: "Kafka Topic 实时接入,支持 JSON 消息解析" },
27
+ { label: "MySQL / Aurora MySQL", description: "单表 CDC 实时同步" },
28
+ { label: "PostgreSQL / Aurora PG", description: "单表 CDC 实时同步" },
29
+ { label: "SQL Server", description: "单表 CDC 实时同步" }
30
+ ]
31
+ },
32
+ {
33
+ question: "同步粒度?",
34
+ options: [
35
+ { label: "单表/单 Topic", description: "本 skill 支持,精细化配置" },
36
+ { label: "整库/多表", description: "建议改用 clickzetta-cdc-sync-pipeline" }
37
+ ]
38
+ }
39
+ ]
40
+ })
41
+ ```
42
+
43
+ **如果用户已经提供了足够信息,直接进入工作流,不再弹出菜单。**
44
+
45
+ ---
46
+
47
+ ## 适用场景
48
+
49
+ - 将外部数据源的数据实时同步到 Lakehouse(低延迟、持续运行)
50
+ - Kafka Topic → Lakehouse 表(支持 JSON 消息解析)
51
+ - MySQL / PostgreSQL / SQL Server 等数据库 → Lakehouse 表(CDC 变更捕获)
52
+ - 数据时效性要求高,需要秒级或分钟级延迟
53
+ - 单张源表/Topic 到单张目标表的实时同步
54
+ - 关键词:实时同步、CDC、流式同步、realtime sync、Kafka 实时同步
55
+
56
+ ## 与其他同步方式的区别
57
+
58
+ | 维度 | 实时同步(本 Skill) | 离线同步 | 多表实时同步 |
59
+ |------|---------------------|---------|------------|
60
+ | 任务类型 ID | `14`(REALTIME/CDC) | `10` / `291` | `281` |
61
+ | 同步粒度 | 单表/单 Topic | 单表/多表 | 整库/多表 |
62
+ | 运行模式 | 持续运行(流式) | 周期调度(批量) | 持续运行(流式) |
63
+ | 调度策略 | 无需配置,提交即运行 | 需配置 Cron 表达式 | 无需配置,提交即运行 |
64
+ | 延迟 | 秒级~分钟级 | 取决于调度周期 | 秒级~分钟级 |
65
+ | 适用 Skill | `clickzetta-realtime-sync-pipeline` | `clickzetta-batch-sync-pipeline` | `clickzetta-cdc-sync-pipeline` |
66
+
67
+ ## 前置依赖
68
+
69
+ - ClickZetta Lakehouse Studio 账户,具备创建同步任务、目标表的权限
70
+ - 源端数据源已在 Studio 中配置(Kafka / MySQL / PostgreSQL / SQL Server 等)
71
+ - 目标端 Lakehouse 数据源可用
72
+ - Sync VCluster 可用(实时同步任务 task_type=14 需要 Sync VCluster)
73
+ - **执行环境(满足其一即可,优先使用 cz-cli)**:
74
+ - **cz-cli 路径**:已安装 cz-cli(`brew install cz-cli 或参考官方文档安装`),并完成 `cz-cli setup` 配置
75
+ - **MCP 路径**:clickzetta-studio-mcp 工具可用(`create_task`、`save_integration_task`、`publish_task`、`list_data_sources`、`LH_show_object_list` 等)
76
+
77
+ ## 环境探测(执行前必读)
78
+
79
+ 在开始任何操作前,先判断当前执行环境:
80
+
81
+ **第一步:检测 cz-cli 是否可用**
82
+ ```bash
83
+ cz-cli --version
84
+ ```
85
+ - 若命令存在 → **走 cz-cli 路径**(见本文档末尾"cz-cli 替代路径"章节)
86
+ - 若命令不存在 → 继续检测 MCP
87
+
88
+ **第二步:检测 MCP 是否可用(仅在 cz-cli 不可用时)**
89
+
90
+ 尝试调用 `list_data_sources` 工具查询数据源列表。
91
+ - 若工具存在于 tool list → **走 MCP 路径**(本文档默认路径)
92
+ - 若工具不存在 → 停止执行,提示用户:
93
+ > "当前环境既无 cz-cli 也无 MCP 工具,请安装其中之一后重试。
94
+ > cz-cli 安装:`brew install cz-cli 或参考官方文档安装`,然后运行 `cz-cli setup`
95
+ > MCP 安装:参考 clickzetta-studio-mcp 配置文档"
96
+
97
+ ## 工作流
98
+
99
+ ### 步骤 1:确认 Sync VCluster 可用
100
+
101
+ ```
102
+ 使用 LH_show_object_list(object_type='VCLUSTERS')查看可用虚拟集群。
103
+ 筛选 vcluster_type 包含 SYNC 的集群。
104
+ 如无可用 Sync VCluster,需先创建后再继续。
105
+ ```
106
+
107
+ ### 步骤 2:查找可用数据源
108
+
109
+ ```
110
+ 使用 list_data_sources 查看已配置的数据源列表。
111
+ 按类型过滤:
112
+ - Kafka: ds_type=2
113
+ - MySQL: ds_type=5
114
+ - PostgreSQL: ds_type=7
115
+ - SQL Server: ds_type=8
116
+ 记录源端 datasource_name 和目标端 Lakehouse datasource_name。
117
+ ```
118
+
119
+ ### 步骤 3:探查源端数据结构(可选)
120
+
121
+ ```
122
+ 使用 list_namespaces 查看源端数据源的命名空间(数据库/Schema)。
123
+ 使用 list_metadata_objects 查看命名空间下的表/Topic 列表。
124
+ 使用 get_metadata_detail 查看具体表/Topic 的字段结构。
125
+ ```
126
+
127
+ ### 步骤 4:创建实时同步任务
128
+
129
+ ```
130
+ 使用 create_task 创建任务:
131
+ - task_type: 14(实时同步)
132
+ - task_name: 自定义任务名称(建议包含源和目标信息,如 "rt_sync_kafka_orders")
133
+ - data_folder_id: 目标文件夹 ID(可通过 list_folders 获取)
134
+
135
+ 记录返回的 task_id 和 studio_url。
136
+ ```
137
+
138
+ ### 步骤 5:配置同步内容
139
+
140
+ ```
141
+ 使用 save_integration_task 配置同步:
142
+ - task_id: 步骤 4 返回的任务 ID
143
+ - source_datasource_name: 源端数据源名称
144
+ - source_schema: 源端数据库/Schema(Kafka 场景为 Topic 所在命名空间)
145
+ - source_table: 源端表名或 Kafka Topic 名称
146
+ - source_ds_type: 源端类型(2=Kafka, 5=MySQL, 7=PostgreSQL, 8=SQL Server)
147
+ - sink_datasource_name: 目标 Lakehouse 数据源名称
148
+ - sink_schema: 目标 Schema(默认 public)
149
+ - sink_table: 目标表名(可选,默认与源表同名)
150
+ - sink_ds_type: 1(Lakehouse)
151
+ ```
152
+
153
+ > **说明**:系统会自动获取源端和目标端的元数据,生成字段映射。如目标表不存在,会自动创建。
154
+
155
+ ### 步骤 6:Kafka JSON 消息解析(Kafka 数据源专用)
156
+
157
+ 如果 Kafka Topic 的消息格式为 JSON,可在 Studio UI 中通过新增计算列解析嵌套字段:
158
+
159
+ - 使用 JSONPath 规则解析 value 字段中的内容
160
+ - 示例:`$.id` 提取顶层 id 字段,`$.data.code` 提取嵌套字段
161
+ - 默认使用 Kafka Topic 内置字段(key、value、timestamp、partition、offset)进行映射
162
+ - 计算列配置需在 Studio UI 中完成(通过 studio_url 打开)
163
+
164
+ ### 步骤 7:提交部署
165
+
166
+ ```
167
+ 实时同步任务不需要配置调度策略(无需调用 save_task_configuration)。
168
+ 直接使用 publish_task 提交任务:
169
+ - task_id: 任务 ID
170
+ - task_version: 当前版本号(通过 get_task_detail 获取)
171
+
172
+ 提交后任务即开始持续运行。
173
+ ```
174
+
175
+ > **重要**:实时同步任务不支持开发状态下的测试运行,提交即为正式部署。
176
+
177
+ ### 步骤 8:运维监控
178
+
179
+ ```
180
+ 提交后在运维中心管理实时同步任务:
181
+
182
+ 查看任务状态:get_task_detail
183
+ 查看运行记录:list_task_run(注意实时任务为持续运行,不同于离线任务的周期实例)
184
+
185
+ Studio UI 中可进行:
186
+ - 启动/停止任务
187
+ - 查看同步延迟和吞吐量
188
+ - 查看错误日志
189
+ ```
190
+
191
+ ---
192
+
193
+ ## 支持的数据源
194
+
195
+ ### 来源端
196
+
197
+ | 数据源 | ds_type | 说明 |
198
+ |--------|---------|------|
199
+ | Kafka | 2 | 支持 JSON 消息解析(JSONPath 计算列) |
200
+ | MySQL | 5 | CDC 变更捕获 |
201
+ | PostgreSQL | 7 | CDC 变更捕获 |
202
+ | SQL Server | 8 | CDC 变更捕获 |
203
+ | Aurora MySQL | 39 | CDC 变更捕获 |
204
+ | Aurora PostgreSQL | 40 | CDC 变更捕获 |
205
+ | PolarDB MySQL | 19 | CDC 变更捕获 |
206
+ | PolarDB PostgreSQL | 48 | CDC 变更捕获 |
207
+
208
+ ### 目标端
209
+
210
+ | 数据源 | ds_type |
211
+ |--------|---------|
212
+ | Lakehouse | 1 |
213
+
214
+ ## 故障排除
215
+
216
+ | 问题 | 排查方向 |
217
+ |------|---------|
218
+ | 任务创建失败 | 检查是否有可用的 Sync VCluster(`LH_show_object_list` 查看 VCLUSTERS,筛选 SYNC 类型) |
219
+ | 源端连接失败 | 检查数据源配置中的连接信息、网络可达性、账号权限 |
220
+ | Kafka 消费无数据 | 检查 Topic 名称是否正确、消费位点设置、Kafka 集群连通性 |
221
+ | JSON 解析失败 | 检查 JSONPath 表达式是否正确、消息格式是否为合法 JSON |
222
+ | 同步延迟增大 | 检查 Sync VCluster 资源是否充足、源端数据量是否突增 |
223
+ | 目标表写入失败 | 检查目标表是否存在、字段类型是否兼容、权限是否充足 |
224
+ | 任务异常停止 | 查看执行日志(`list_executions` + `get_execution_log`)排查具体错误 |
225
+
226
+ ## 注意事项
227
+
228
+ ### 运行模式
229
+
230
+ - 实时同步任务为持续运行的流式任务,提交后即开始运行,无需配置调度
231
+ - 不支持开发状态下的测试运行
232
+ - 停止后需手动重新启动
233
+
234
+ ### Sync VCluster 要求
235
+
236
+ - 实时同步任务(task_type=14)必须使用 Sync VCluster
237
+ - 创建任务前需确认有可用的 Sync VCluster
238
+ - 可通过 `LH_show_object_list`(object_type='VCLUSTERS')查看,筛选 vcluster_type 包含 SYNC 的集群
239
+
240
+ ### Kafka 数据源特殊说明
241
+
242
+ - 支持指定消费起始位点(earliest / latest / 指定 offset)
243
+ - JSON 消息可通过 JSONPath 计算列解析嵌套字段
244
+ - 默认字段包括:key、value、timestamp、partition、offset
245
+
246
+ ### 与多表实时同步的选择
247
+
248
+ - 单表实时同步(本 Skill):适合单张表/Topic 的精细化同步
249
+ - 多表实时同步(`clickzetta-cdc-sync-pipeline`):适合整库 CDC、多表批量实时同步
250
+ - 如需同步整个数据库的所有表,建议使用多表实时同步
251
+
252
+ ---
253
+
254
+ ## cz-cli 替代路径
255
+
256
+ > 仅在 cz-cli 可用且 MCP 不可用时使用本节。步骤编号与上方 MCP 路径对应。
257
+ > 所有操作通过 `cz-cli agent run` 委托给内置 agent 完成,agent 内置完整的 Studio MCP 工具访问能力。
258
+
259
+ ### 单表实时同步(cz-cli 版)
260
+
261
+ **快速路径**:直接创建任务,然后在 Studio UI 配置数据源
262
+
263
+ ```bash
264
+ # 步骤 1:创建实时同步任务(task_type=14,即 REALTIME/CDC)
265
+ cz-cli task create "rt_sync_<table>" --type REALTIME --folder <folder_name>
266
+ # 返回 task_id 和 studio_url,在 studio_url 中完成数据源配置和字段映射
267
+
268
+ # 步骤 2:配置完成后,发布任务(实时同步无需配置调度,提交即持续运行)
269
+ cz-cli task deploy "rt_sync_<table>" -y
270
+ ```
271
+
272
+ **完整 agent 路径**(需要 agent 完成数据源探查和配置):
273
+
274
+ ```bash
275
+ # 一键完成:让 agent 完成完整的实时同步任务创建
276
+ cz-cli agent run "创建实时同步任务(task_type=14),将数据源 <source_ds_name> 中 <schema>.<table>(或 Kafka topic <topic>)实时同步到 Lakehouse public schema,使用 Sync VCluster,任务名 rt_sync_<table>,放在 <folder_name> 文件夹下" \
277
+ --format a2a --dangerously-skip-permissions
278
+ ```
279
+
280
+ 对于需要精细控制的场景,可拆分步骤:
281
+
282
+ ```bash
283
+ # 步骤 1:确认 Sync VCluster 可用
284
+ cz-cli agent run "列出所有可用的 VCluster,筛选 vcluster_type 包含 SYNC 的集群,确认有可用的 Sync VCluster" \
285
+ --format a2a --dangerously-skip-permissions
286
+
287
+ # 步骤 2:查找数据源
288
+ cz-cli agent run "列出所有已配置的数据源,按类型过滤(Kafka: ds_type=2, MySQL: ds_type=5, PostgreSQL: ds_type=7, SQL Server: ds_type=8),记录源端和目标端 Lakehouse 数据源名称" \
289
+ --format a2a --dangerously-skip-permissions
290
+
291
+ # 步骤 3(可选):探查源端数据结构
292
+ cz-cli agent run "查看数据源 <source_ds_name> 的命名空间列表,以及 <schema> 下的表/Topic 列表和字段结构" \
293
+ --format a2a --dangerously-skip-permissions
294
+
295
+ # 步骤 4-5:创建并配置实时同步任务
296
+ cz-cli agent run "创建实时同步任务(task_type=14),源端 datasource=<source_ds_name>,schema=<schema>,table=<table>(source_ds_type=<type>),目标 Lakehouse public.<table>,任务名 rt_sync_<table>" \
297
+ --format a2a --dangerously-skip-permissions
298
+
299
+ # 步骤 7:提交部署
300
+ cz-cli agent run "提交实时同步任务 rt_sync_<table>,使其开始持续运行" \
301
+ --format a2a --dangerously-skip-permissions
302
+ ```
303
+
304
+ > **注意**:实时同步任务不需要配置调度策略,提交即开始持续运行。Kafka JSON 消息的计算列配置需在 Studio UI 中完成。
305
+
306
+ ---
307
+
308
+ ### 运维监控(cz-cli 版)
309
+
310
+ ```bash
311
+ # 查看最近运行记录
312
+ cz-cli runs list --task <task_name>
313
+
314
+ # 查看运行详情
315
+ cz-cli runs detail <run_id>
316
+
317
+ # 查看执行日志
318
+ cz-cli attempts log <run_id>
319
+
320
+ # 下线任务(停止持续运行)
321
+ cz-cli task undeploy <task_name> -y
322
+ ```
323
+
@@ -0,0 +1,5 @@
1
+ {"case_id":"001","type":"should_call","user_input":"怎么用 Studio 创建单表实时同步任务?","expected_skill":"clickzetta-realtime-sync-pipeline","expected_output_contains":["实时同步","task_type","28"]}
2
+ {"case_id":"002","type":"should_call","user_input":"Kafka 单个 topic 实时同步到 Lakehouse 表怎么配置?","expected_skill":"clickzetta-realtime-sync-pipeline","expected_output_contains":["Kafka","实时同步"]}
3
+ {"case_id":"003","type":"should_call","user_input":"单表实时同步和多表实时同步有什么区别?","expected_skill":"clickzetta-realtime-sync-pipeline","expected_output_contains":["单表","多表","28","281"]}
4
+ {"case_id":"004","type":"should_call","user_input":"MySQL 单表 CDC 实时同步到 Lakehouse 怎么做?","expected_skill":"clickzetta-realtime-sync-pipeline","expected_output_contains":["MySQL","实时同步","CDC"]}
5
+ {"case_id":"005","type":"should_call","user_input":"实时同步任务需要配置调度策略吗?","expected_skill":"clickzetta-realtime-sync-pipeline","expected_output_contains":["无需配置","持续运行"]}
@@ -0,0 +1,207 @@
1
+ ---
2
+ name: clickzetta-semantic-view
3
+ description: |
4
+ 创建和查询 ClickZetta Lakehouse 语义视图(Semantic View)。语义视图是架构级逻辑
5
+ 数据模型对象,通过声明逻辑表、维度、指标、过滤器,将复杂的多表 JOIN 和聚合逻辑封装
6
+ 为业务友好的语义层,使用 semantic_view() 函数查询,无需手写 JOIN。
7
+ 当前为邀测功能(1.3 版本起)。
8
+ 当用户说"创建语义视图"、"semantic view"、"语义层"、"定义指标"、"定义维度"、
9
+ "semantic_view() 怎么用"、"统一指标口径"、"业务语义模型"、"逻辑表"、
10
+ "DIMENSIONS"、"METRICS"、"FILTERS"、"DROP SEMANTIC VIEW"、
11
+ "SHOW SEMANTIC VIEWS"时触发。
12
+ Keywords: semantic view, dimension, metric, logical model, unified metrics, semantic layer
13
+ ---
14
+
15
+ # ClickZetta 语义视图(Semantic View)
16
+
17
+ 阅读 [references/semantic-view-reference.md](references/semantic-view-reference.md) 了解完整语法。
18
+
19
+ ---
20
+
21
+ ## 概述
22
+
23
+ 语义视图是 ClickZetta Lakehouse 的**架构级逻辑数据模型对象**,解决两类核心问题:
24
+
25
+ - **数据分析**:统一维度和指标定义,业务用户无需编写复杂 JOIN 即可查询跨表数据
26
+ - **数据治理**:集中管理表关系、维度、指标定义,确保全组织使用相同数据口径
27
+
28
+ > ⚠️ 当前为**邀测功能**(1.3 版本),需联系技术支持开通。
29
+
30
+ ---
31
+
32
+ ## 四大组件
33
+
34
+ | 组件 | 关键字 | 说明 |
35
+ |---|---|---|
36
+ | 逻辑表 | `TABLES` | 映射物理表,声明主键和外键关系,引擎自动处理 JOIN |
37
+ | 维度 | `DIMENSIONS` | 分类属性(谁/什么/哪里/何时),支持计算维度 |
38
+ | 指标 | `METRICS` | 聚合度量(SUM/AVG/COUNT/MIN/MAX),业务 KPI |
39
+ | 过滤器 | `FILTERS` | 预定义可重用过滤条件(语义注解,不可直接传入查询) |
40
+
41
+ ---
42
+
43
+ ## 创建语义视图
44
+
45
+ ```sql
46
+ CREATE SEMANTIC VIEW <视图名>
47
+ TABLES (
48
+ <表别名> AS <schema>.<物理表>
49
+ PRIMARY KEY (<列名>)
50
+ [ FOREIGN KEY (<列名>) REFERENCES <其他表别名> ]
51
+ [ WITH SYNONYMS ('<同义词>') ]
52
+ [ COMMENT = '<说明>' ]
53
+ [ , ... ]
54
+ )
55
+ [ FILTERS (
56
+ <表别名>.<过滤器名> AS <布尔表达式>
57
+ [ , ... ]
58
+ ) ]
59
+ DIMENSIONS (
60
+ { <表别名>.<维度名> | <维度名> } AS <表达式>
61
+ [ WITH SYNONYMS = ('<同义词>' [ , ... ]) ]
62
+ [ is_unique = { true | false } ]
63
+ [ is_time = { true | false } ]
64
+ [ enum_values = [ <值1>, <值2>, ... ] ]
65
+ [ COMMENT = '<说明>' ]
66
+ [ , ... ]
67
+ )
68
+ METRICS (
69
+ <表别名>.<指标名> AS <聚合表达式>
70
+ [ COMMENT = '<说明>' ]
71
+ [ , ... ]
72
+ )
73
+ [ COMMENT = '<视图说明>' ];
74
+ ```
75
+
76
+ ### 完整示例(TPC-H 收入分析)
77
+
78
+ ```sql
79
+ DROP SEMANTIC VIEW IF EXISTS tpch_rev_analysis;
80
+ CREATE SEMANTIC VIEW tpch_rev_analysis
81
+ TABLES (
82
+ customers AS tpch.customer
83
+ PRIMARY KEY (c_custkey)
84
+ COMMENT = '客户主表',
85
+ orders AS tpch.orders
86
+ PRIMARY KEY (o_orderkey)
87
+ FOREIGN KEY (o_custkey) REFERENCES customers
88
+ WITH SYNONYMS ('销售订单')
89
+ COMMENT = '订单表',
90
+ line_items AS tpch.lineitem
91
+ PRIMARY KEY (l_orderkey, l_linenumber)
92
+ FOREIGN KEY (l_orderkey) REFERENCES orders
93
+ COMMENT = '订单明细'
94
+ )
95
+ FILTERS (
96
+ customers.is_building AS customers.c_mktsegment = 'BUILDING'
97
+ )
98
+ DIMENSIONS (
99
+ customers.customer_name AS c_name
100
+ WITH SYNONYMS = ('客户名称', 'customer name')
101
+ is_unique = true
102
+ COMMENT = '客户名称',
103
+ orders.order_date AS o_orderdate
104
+ is_time = true
105
+ COMMENT = '下单日期',
106
+ orders.order_year AS YEAR(o_orderdate)
107
+ COMMENT = '下单年份',
108
+ orders.order_status AS o_orderstatus
109
+ enum_values = ['O', 'F', 'P']
110
+ COMMENT = '订单状态'
111
+ )
112
+ METRICS (
113
+ customers.customer_count AS COUNT(c_custkey)
114
+ COMMENT = '客户总数',
115
+ orders.avg_order_value AS AVG(o_totalprice)
116
+ COMMENT = '平均订单金额',
117
+ orders.total_revenue AS SUM(o_totalprice)
118
+ COMMENT = '总收入'
119
+ )
120
+ COMMENT = '收入分析语义视图';
121
+ ```
122
+
123
+ ---
124
+
125
+ ## 查询语义视图
126
+
127
+ 使用 `semantic_view()` 表函数,**无需手写 JOIN 和 GROUP BY**:
128
+
129
+ ```sql
130
+ -- 基础查询:按订单日期统计平均订单金额
131
+ SELECT * FROM semantic_view(
132
+ tpch_rev_analysis,
133
+ DIMENSIONS orders.order_date,
134
+ METRICS orders.avg_order_value
135
+ );
136
+
137
+ -- 多维度查询:按日期和客户名称
138
+ SELECT * FROM semantic_view(
139
+ tpch_rev_analysis,
140
+ DIMENSIONS orders.order_date,
141
+ DIMENSIONS customers.customer_name,
142
+ METRICS orders.avg_order_value
143
+ );
144
+
145
+ -- 使用短名称(名称唯一时可省略表别名前缀)
146
+ SELECT * FROM semantic_view(
147
+ tpch_rev_analysis,
148
+ DIMENSIONS order_date,
149
+ DIMENSIONS customer_name,
150
+ METRICS avg_order_value
151
+ );
152
+
153
+ -- 加 WHERE 过滤(需将过滤列定义为 DIMENSION)
154
+ SELECT * FROM semantic_view(
155
+ tpch_rev_analysis,
156
+ DIMENSIONS customers.customer_name,
157
+ DIMENSIONS orders.order_status,
158
+ METRICS orders.total_revenue
159
+ ) WHERE order_status = 'O';
160
+ ```
161
+
162
+ ### 与传统 SQL 对比
163
+
164
+ ```sql
165
+ -- 传统 SQL(需手写 JOIN + GROUP BY)
166
+ SELECT o.o_orderdate, c.c_name, AVG(o.o_totalprice)
167
+ FROM tpch.orders o
168
+ JOIN tpch.customer c ON o.o_custkey = c.c_custkey
169
+ GROUP BY o.o_orderdate, c.c_name;
170
+
171
+ -- 语义视图(自动处理 JOIN 和聚合)
172
+ SELECT * FROM semantic_view(
173
+ tpch_rev_analysis,
174
+ DIMENSIONS order_date,
175
+ DIMENSIONS customer_name,
176
+ METRICS avg_order_value
177
+ );
178
+ ```
179
+
180
+ ---
181
+
182
+ ## 管理命令
183
+
184
+ ```sql
185
+ -- 删除(推荐先删再建,确保幂等)
186
+ DROP SEMANTIC VIEW IF EXISTS tpch_rev_analysis;
187
+
188
+ -- 列出当前 Schema 的所有语义视图
189
+ SHOW SEMANTIC VIEWS;
190
+ SHOW SEMANTIC VIEWS IN my_schema;
191
+
192
+ -- 查看详细定义(逻辑表、维度、指标、外键)
193
+ DESC EXTENDED tpch_rev_analysis;
194
+ ```
195
+
196
+ ---
197
+
198
+ ## 注意事项
199
+
200
+ 1. **TABLES 定义顺序**:被外键引用的表必须先定义(如 `customers` 必须在 `orders` 之前)
201
+ 2. **FILTERS 是语义注解**:`FILTERS` 中的命名过滤器不能作为 `semantic_view()` 的参数,WHERE 子句只能引用 `DIMENSIONS` 中定义的列名(短名),不能用物理列名
202
+ 3. **WHERE 只能用 DIMENSION 短名**:`WHERE customer_name = 'Alice'` ✅,`WHERE c_name = 'Alice'` ❌
203
+ 4. **短名称 vs 限定名称**:名称在视图内唯一时可用短名称,有冲突时必须用 `表别名.名称`
204
+ 5. **幂等创建**:始终先 `DROP SEMANTIC VIEW IF EXISTS` 再创建,避免重复执行报错
205
+ 6. **计算维度**:DIMENSIONS 支持表达式,如 `YEAR(CAST(order_date AS DATE))` 提取年份
206
+ 7. **指标聚合函数**:仅支持 `COUNT`、`AVG`、`SUM`、`MIN`、`MAX`
207
+ 8. **DIMENSIONS 和 METRICS 可单独使用**:可以只查 METRICS(全局聚合),也可以只查 DIMENSIONS(去重列表)
@@ -0,0 +1,12 @@
1
+ {"case_id":"001","type":"should_call","user_input":"怎么创建语义视图","expected_skill":"clickzetta-semantic-view","expected_output_contains":["CREATE SEMANTIC VIEW"]}
2
+ {"case_id":"002","type":"should_call","user_input":"semantic_view() 函数怎么查询","expected_skill":"clickzetta-semantic-view","expected_output_contains":["semantic_view"]}
3
+ {"case_id":"003","type":"should_call","user_input":"语义视图里怎么定义维度和指标","expected_skill":"clickzetta-semantic-view","expected_output_contains":["DIMENSIONS","METRICS"]}
4
+ {"case_id":"004","type":"should_call","user_input":"怎么用语义层统一指标口径","expected_skill":"clickzetta-semantic-view","expected_output_contains":["语义"]}
5
+ {"case_id":"005","type":"should_call","user_input":"SHOW SEMANTIC VIEWS 怎么用","expected_skill":"clickzetta-semantic-view","expected_output_contains":["SHOW SEMANTIC VIEWS"]}
6
+ {"case_id":"006","type":"should_call","user_input":"语义视图的 FILTERS 怎么定义","expected_skill":"clickzetta-semantic-view","expected_output_contains":["FILTERS"]}
7
+ {"case_id":"007","type":"should_call","user_input":"DROP SEMANTIC VIEW 怎么删除","expected_skill":"clickzetta-semantic-view","expected_output_contains":["DROP SEMANTIC VIEW"]}
8
+ {"case_id":"008","type":"should_not_call","user_input":"怎么创建普通视图","forbidden_skill":"clickzetta-semantic-view"}
9
+ {"case_id":"009","type":"should_not_call","user_input":"帮我写一个数据看板","forbidden_skill":"clickzetta-semantic-view"}
10
+ {"case_id":"010","type":"should_not_call","user_input":"怎么做数据建模","forbidden_skill":"clickzetta-semantic-view"}
11
+ {"case_id":"011","type":"should_not_call","user_input":"Superset 怎么连接","forbidden_skill":"clickzetta-semantic-view"}
12
+ {"case_id":"012","type":"should_not_call","user_input":"怎么创建物化视图","forbidden_skill":"clickzetta-semantic-view"}