@clickzetta/cz-cli-darwin-arm64 0.3.81 → 0.3.83

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 (201) hide show
  1. package/bin/cz-cli +0 -0
  2. package/bin/skills/clickzetta-access-control/LICENSE +16 -0
  3. package/bin/skills/clickzetta-access-control/SKILL.md +243 -0
  4. package/bin/skills/clickzetta-access-control/eval_cases.jsonl +3 -0
  5. package/bin/skills/clickzetta-access-control/references/dynamic-masking.md +86 -0
  6. package/bin/skills/clickzetta-access-control/references/grant-revoke.md +103 -0
  7. package/bin/skills/clickzetta-access-control/references/role-management.md +66 -0
  8. package/bin/skills/clickzetta-access-control/references/user-management.md +61 -0
  9. package/bin/skills/clickzetta-app-python-sdk/LICENSE +16 -0
  10. package/bin/skills/clickzetta-app-python-sdk/SKILL.md +153 -0
  11. package/bin/skills/clickzetta-app-python-sdk/eval_cases.jsonl +12 -0
  12. package/bin/skills/clickzetta-app-python-sdk/references/bulkload.md +196 -0
  13. package/bin/skills/clickzetta-app-python-sdk/references/connector.md +143 -0
  14. package/bin/skills/clickzetta-app-python-sdk/references/realtime.md +122 -0
  15. package/bin/skills/clickzetta-batch-sync-pipeline/LICENSE +16 -0
  16. package/bin/skills/clickzetta-batch-sync-pipeline/SKILL.md +227 -0
  17. package/bin/skills/clickzetta-batch-sync-pipeline/eval_cases.jsonl +5 -0
  18. package/bin/skills/clickzetta-bi-connect/LICENSE +16 -0
  19. package/bin/skills/clickzetta-bi-connect/SKILL.md +176 -0
  20. package/bin/skills/clickzetta-bi-connect/eval_cases.jsonl +5 -0
  21. package/bin/skills/clickzetta-bi-connect/references/bi-tools.md +170 -0
  22. package/bin/skills/clickzetta-cdc-sync-pipeline/LICENSE +16 -0
  23. package/bin/skills/clickzetta-cdc-sync-pipeline/SKILL.md +633 -0
  24. package/bin/skills/clickzetta-cdc-sync-pipeline/eval_cases.jsonl +5 -0
  25. package/bin/skills/clickzetta-data-ingest-pipeline/LICENSE +16 -0
  26. package/bin/skills/clickzetta-data-ingest-pipeline/SKILL.md +237 -0
  27. package/bin/skills/clickzetta-data-ingest-pipeline/eval_cases.jsonl +5 -0
  28. package/bin/skills/clickzetta-data-retention/LICENSE +16 -0
  29. package/bin/skills/clickzetta-data-retention/SKILL.md +160 -0
  30. package/bin/skills/clickzetta-data-retention/eval_cases.jsonl +5 -0
  31. package/bin/skills/clickzetta-data-retention/references/lifecycle-reference.md +175 -0
  32. package/bin/skills/clickzetta-data-science/LICENSE +16 -0
  33. package/bin/skills/clickzetta-data-science/SKILL.md +125 -0
  34. package/bin/skills/clickzetta-data-science/eval_cases.jsonl +12 -0
  35. package/bin/skills/clickzetta-data-science/references/bitmap-profile.md +146 -0
  36. package/bin/skills/clickzetta-data-science/references/data-patterns.md +110 -0
  37. package/bin/skills/clickzetta-data-science/references/setup.md +160 -0
  38. package/bin/skills/clickzetta-data-science/references/stats-functions.md +195 -0
  39. package/bin/skills/clickzetta-data-science/references/write-and-infer.md +122 -0
  40. package/bin/skills/clickzetta-data-science/references/zettapark-api.md +156 -0
  41. package/bin/skills/clickzetta-data-sharing/LICENSE +16 -0
  42. package/bin/skills/clickzetta-data-sharing/SKILL.md +160 -0
  43. package/bin/skills/clickzetta-data-sharing/eval_cases.jsonl +3 -0
  44. package/bin/skills/clickzetta-data-sharing/references/share-ddl.md +134 -0
  45. package/bin/skills/clickzetta-dba-guide/LICENSE +16 -0
  46. package/bin/skills/clickzetta-dba-guide/SKILL.md +542 -0
  47. package/bin/skills/clickzetta-dba-guide/eval_cases.jsonl +3 -0
  48. package/bin/skills/clickzetta-dw-modeling/LICENSE +16 -0
  49. package/bin/skills/clickzetta-dw-modeling/SKILL.md +351 -0
  50. package/bin/skills/clickzetta-dw-modeling/eval_cases.jsonl +4 -0
  51. package/bin/skills/clickzetta-dw-modeling/references/modeling-patterns.md +100 -0
  52. package/bin/skills/clickzetta-dynamic-table/LICENSE +16 -0
  53. package/bin/skills/clickzetta-dynamic-table/SKILL.md +230 -0
  54. package/bin/skills/clickzetta-dynamic-table/best-practices/dimension-table-join-guide.md +253 -0
  55. package/bin/skills/clickzetta-dynamic-table/best-practices/medallion-and-stream-patterns.md +124 -0
  56. package/bin/skills/clickzetta-dynamic-table/best-practices/non-partitioned-merge-into-warning.md +96 -0
  57. package/bin/skills/clickzetta-dynamic-table/best-practices/performance-optimization.md +109 -0
  58. package/bin/skills/clickzetta-dynamic-table/best-practices/scheduling-guide.md +135 -0
  59. package/bin/skills/clickzetta-dynamic-table/dt-creator/SKILL.md +15 -0
  60. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/dt-declaration-strategy.md +185 -0
  61. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/incremental-config-reference.md +427 -0
  62. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/refresh-history-guide.md +260 -0
  63. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/sql-limitations.md +80 -0
  64. package/bin/skills/clickzetta-dynamic-table/dynamic-table-alter/SKILL.md +190 -0
  65. package/bin/skills/clickzetta-dynamic-table/eval_cases.jsonl +5 -0
  66. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/SKILL.md +27 -0
  67. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-column-validation-rules.md +118 -0
  68. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-conversion-rules.md +225 -0
  69. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-placeholder-rules.md +182 -0
  70. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-refresh-rules.md +98 -0
  71. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-self-reference-rules.md +76 -0
  72. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-workflow.md +109 -0
  73. package/bin/skills/clickzetta-external-catalog/LICENSE +16 -0
  74. package/bin/skills/clickzetta-external-catalog/SKILL.md +123 -0
  75. package/bin/skills/clickzetta-external-catalog/eval_cases.jsonl +5 -0
  76. package/bin/skills/clickzetta-external-catalog/references/external-catalog-ddl.md +130 -0
  77. package/bin/skills/clickzetta-external-function/LICENSE +16 -0
  78. package/bin/skills/clickzetta-external-function/SKILL.md +203 -0
  79. package/bin/skills/clickzetta-external-function/eval_cases.jsonl +4 -0
  80. package/bin/skills/clickzetta-external-function/references/external-function-ddl.md +171 -0
  81. package/bin/skills/clickzetta-file-import-pipeline/LICENSE +16 -0
  82. package/bin/skills/clickzetta-file-import-pipeline/SKILL.md +190 -0
  83. package/bin/skills/clickzetta-file-import-pipeline/eval_cases.jsonl +5 -0
  84. package/bin/skills/clickzetta-index-manager/LICENSE +16 -0
  85. package/bin/skills/clickzetta-index-manager/SKILL.md +140 -0
  86. package/bin/skills/clickzetta-index-manager/eval_cases.jsonl +5 -0
  87. package/bin/skills/clickzetta-index-manager/references/bloomfilter-index.md +67 -0
  88. package/bin/skills/clickzetta-index-manager/references/index-management.md +73 -0
  89. package/bin/skills/clickzetta-index-manager/references/inverted-index.md +80 -0
  90. package/bin/skills/clickzetta-index-manager/references/vector-index.md +81 -0
  91. package/bin/skills/clickzetta-java-sdk/LICENSE +16 -0
  92. package/bin/skills/clickzetta-java-sdk/SKILL.md +186 -0
  93. package/bin/skills/clickzetta-java-sdk/eval_cases.jsonl +12 -0
  94. package/bin/skills/clickzetta-java-sdk/references/bulkload.md +163 -0
  95. package/bin/skills/clickzetta-java-sdk/references/realtime.md +212 -0
  96. package/bin/skills/clickzetta-kafka-ingest-pipeline/LICENSE +16 -0
  97. package/bin/skills/clickzetta-kafka-ingest-pipeline/SKILL.md +769 -0
  98. package/bin/skills/clickzetta-kafka-ingest-pipeline/eval_cases.jsonl +5 -0
  99. package/bin/skills/clickzetta-kafka-ingest-pipeline/references/kafka-pipe-syntax.md +324 -0
  100. package/bin/skills/clickzetta-lakehouse-connect/LICENSE +16 -0
  101. package/bin/skills/clickzetta-lakehouse-connect/SKILL.md +218 -0
  102. package/bin/skills/clickzetta-lakehouse-connect/eval_cases.jsonl +3 -0
  103. package/bin/skills/clickzetta-lakehouse-connect/evals/evals.json +35 -0
  104. package/bin/skills/clickzetta-lakehouse-connect/references/config-file.md +435 -0
  105. package/bin/skills/clickzetta-lakehouse-connect/references/jdbc.md +478 -0
  106. package/bin/skills/clickzetta-lakehouse-connect/references/python-sdk.md +225 -0
  107. package/bin/skills/clickzetta-lakehouse-connect/references/sqlalchemy.md +468 -0
  108. package/bin/skills/clickzetta-lakehouse-connect/references/zettapark-session.md +445 -0
  109. package/bin/skills/clickzetta-manage-comments/LICENSE +16 -0
  110. package/bin/skills/clickzetta-manage-comments/SKILL.md +219 -0
  111. package/bin/skills/clickzetta-manage-comments/eval_cases.jsonl +3 -0
  112. package/bin/skills/clickzetta-metadata/LICENSE +16 -0
  113. package/bin/skills/clickzetta-metadata/SKILL.md +502 -0
  114. package/bin/skills/clickzetta-metadata/eval_cases.jsonl +5 -0
  115. package/bin/skills/clickzetta-metadata/references/instance-views-reference.md +276 -0
  116. package/bin/skills/clickzetta-metadata/references/metering-views-reference.md +137 -0
  117. package/bin/skills/clickzetta-metadata/references/show-desc-reference.md +326 -0
  118. package/bin/skills/clickzetta-metadata/references/views-reference.md +271 -0
  119. package/bin/skills/clickzetta-monitoring/LICENSE +16 -0
  120. package/bin/skills/clickzetta-monitoring/SKILL.md +215 -0
  121. package/bin/skills/clickzetta-monitoring/eval_cases.jsonl +5 -0
  122. package/bin/skills/clickzetta-monitoring/references/job-history-analysis.md +97 -0
  123. package/bin/skills/clickzetta-monitoring/references/show-jobs.md +48 -0
  124. package/bin/skills/clickzetta-oss-ingest-pipeline/LICENSE +16 -0
  125. package/bin/skills/clickzetta-oss-ingest-pipeline/SKILL.md +562 -0
  126. package/bin/skills/clickzetta-oss-ingest-pipeline/eval_cases.jsonl +5 -0
  127. package/bin/skills/clickzetta-overview/LICENSE +16 -0
  128. package/bin/skills/clickzetta-overview/SKILL.md +102 -0
  129. package/bin/skills/clickzetta-overview/eval_cases.jsonl +5 -0
  130. package/bin/skills/clickzetta-overview/references/brands-and-endpoints.md +79 -0
  131. package/bin/skills/clickzetta-overview/references/object-model.md +311 -0
  132. package/bin/skills/clickzetta-overview/references/studio-modules.md +173 -0
  133. package/bin/skills/clickzetta-pipeline-review/LICENSE +16 -0
  134. package/bin/skills/clickzetta-pipeline-review/SKILL.md +377 -0
  135. package/bin/skills/clickzetta-query-optimizer/LICENSE +16 -0
  136. package/bin/skills/clickzetta-query-optimizer/SKILL.md +156 -0
  137. package/bin/skills/clickzetta-query-optimizer/eval_cases.jsonl +5 -0
  138. package/bin/skills/clickzetta-query-optimizer/references/explain.md +56 -0
  139. package/bin/skills/clickzetta-query-optimizer/references/hints-and-sortkey.md +78 -0
  140. package/bin/skills/clickzetta-query-optimizer/references/optimize.md +65 -0
  141. package/bin/skills/clickzetta-query-optimizer/references/result-cache.md +49 -0
  142. package/bin/skills/clickzetta-query-optimizer/references/show-jobs.md +42 -0
  143. package/bin/skills/clickzetta-realtime-sync-pipeline/LICENSE +16 -0
  144. package/bin/skills/clickzetta-realtime-sync-pipeline/SKILL.md +323 -0
  145. package/bin/skills/clickzetta-realtime-sync-pipeline/eval_cases.jsonl +5 -0
  146. package/bin/skills/clickzetta-semantic-view/LICENSE +16 -0
  147. package/bin/skills/clickzetta-semantic-view/SKILL.md +207 -0
  148. package/bin/skills/clickzetta-semantic-view/eval_cases.jsonl +12 -0
  149. package/bin/skills/clickzetta-semantic-view/references/semantic-view-reference.md +167 -0
  150. package/bin/skills/clickzetta-spark-flink-connector/LICENSE +16 -0
  151. package/bin/skills/clickzetta-spark-flink-connector/SKILL.md +92 -0
  152. package/bin/skills/clickzetta-spark-flink-connector/eval_cases.jsonl +5 -0
  153. package/bin/skills/clickzetta-spark-flink-connector/references/flink.md +147 -0
  154. package/bin/skills/clickzetta-spark-flink-connector/references/spark.md +132 -0
  155. package/bin/skills/clickzetta-sql-pipeline-manager/LICENSE +16 -0
  156. package/bin/skills/clickzetta-sql-pipeline-manager/SKILL.md +485 -0
  157. package/bin/skills/clickzetta-sql-pipeline-manager/eval_cases.jsonl +12 -0
  158. package/bin/skills/clickzetta-sql-pipeline-manager/evals/evals.json +166 -0
  159. package/bin/skills/clickzetta-sql-pipeline-manager/references/dynamic-table.md +185 -0
  160. package/bin/skills/clickzetta-sql-pipeline-manager/references/materialized-view.md +129 -0
  161. package/bin/skills/clickzetta-sql-pipeline-manager/references/pipe.md +222 -0
  162. package/bin/skills/clickzetta-sql-pipeline-manager/references/table-stream.md +125 -0
  163. package/bin/skills/clickzetta-sql-syntax-guide/LICENSE +16 -0
  164. package/bin/skills/clickzetta-sql-syntax-guide/SKILL.md +249 -0
  165. package/bin/skills/clickzetta-sql-syntax-guide/eval_cases.jsonl +3 -0
  166. package/bin/skills/clickzetta-sql-syntax-guide/references/ddl-reference.md +350 -0
  167. package/bin/skills/clickzetta-sql-syntax-guide/references/dml-reference.md +279 -0
  168. package/bin/skills/clickzetta-sql-syntax-guide/references/dql-reference.md +504 -0
  169. package/bin/skills/clickzetta-sql-syntax-guide/references/functions-reference.md +372 -0
  170. package/bin/skills/clickzetta-sql-syntax-guide/references/migration-databricks.md +260 -0
  171. package/bin/skills/clickzetta-sql-syntax-guide/references/migration-snowflake.md +382 -0
  172. package/bin/skills/clickzetta-sql-syntax-guide/references/vs-snowflake.md +346 -0
  173. package/bin/skills/clickzetta-sql-syntax-guide/references/vs-spark.md +229 -0
  174. package/bin/skills/clickzetta-studio-task-manager/LICENSE +16 -0
  175. package/bin/skills/clickzetta-studio-task-manager/SKILL.md +652 -0
  176. package/bin/skills/clickzetta-table-lineage/LICENSE +16 -0
  177. package/bin/skills/clickzetta-table-lineage/SKILL.md +90 -0
  178. package/bin/skills/clickzetta-table-lineage/eval_cases.jsonl +1 -0
  179. package/bin/skills/clickzetta-table-lineage/references/normalize_func.sql +14 -0
  180. package/bin/skills/clickzetta-table-lineage/references/table_cost.sql +38 -0
  181. package/bin/skills/clickzetta-table-lineage/references/table_lineage_standalone.html +562 -0
  182. package/bin/skills/clickzetta-table-lineage/references/table_relation.sql +25 -0
  183. package/bin/skills/clickzetta-table-stream-pipeline/LICENSE +16 -0
  184. package/bin/skills/clickzetta-table-stream-pipeline/SKILL.md +206 -0
  185. package/bin/skills/clickzetta-table-stream-pipeline/eval_cases.jsonl +5 -0
  186. package/bin/skills/clickzetta-vcluster-manager/LICENSE +16 -0
  187. package/bin/skills/clickzetta-vcluster-manager/SKILL.md +212 -0
  188. package/bin/skills/clickzetta-vcluster-manager/eval_cases.jsonl +5 -0
  189. package/bin/skills/clickzetta-vcluster-manager/references/vc-cache.md +54 -0
  190. package/bin/skills/clickzetta-vcluster-manager/references/vcluster-ddl.md +150 -0
  191. package/bin/skills/clickzetta-volume-manager/LICENSE +16 -0
  192. package/bin/skills/clickzetta-volume-manager/SKILL.md +292 -0
  193. package/bin/skills/clickzetta-volume-manager/eval_cases.jsonl +5 -0
  194. package/bin/skills/clickzetta-volume-manager/references/volume-ddl.md +199 -0
  195. package/bin/skills/clickzetta-zettapark/LICENSE +16 -0
  196. package/bin/skills/clickzetta-zettapark/SKILL.md +248 -0
  197. package/bin/skills/clickzetta-zettapark/eval_cases.jsonl +12 -0
  198. package/bin/skills/clickzetta-zettapark/references/zettapark-api.md +283 -0
  199. package/bin/skills/cz-cli/SKILL.md +313 -0
  200. package/bin/skills/cz-cli/references/profile-setup.md +120 -0
  201. package/package.json +1 -1
@@ -0,0 +1,16 @@
1
+ ClickZetta Skills License
2
+ © 2026 Yunqi Inc. All rights reserved.
3
+ LICENSE: Use of these materials (including all code, prompts, assets, files, and other components of these skills (collectively, "Skills")) is governed by your agreement with ClickZetta for the Service. If no separate agreement exists, use is governed by ClickZetta's Terms of Service (available at: https://yunqi.tech/documents/user-aggrement).
4
+ Your applicable agreement is referred to as the "Agreement." "Service" is as defined in the Agreement.
5
+ ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the contrary, you may not:
6
+
7
+ Extract from the Service or retain copies of the Skills outside use with the Service;
8
+ Reproduce or copy the Skills, except for temporary copies created automatically during authorized use of the Service;
9
+ Create derivative works based on the Skills;
10
+ Distribute, sublicense, or transfer the Skills to any third party;
11
+ Make, offer to sell, sell, or import any inventions embodied in the Skills; nor,
12
+ Reverse engineer, decompile, or disassemble the Skills.
13
+
14
+ The receipt, viewing, or possession of the Skills does not convey or imply any license or right beyond those expressly granted above.
15
+ Yunqi retains all rights, title, and interest in the Skills, including all copyrights, trademarks, patents, and all other applicable intellectual property rights.
16
+ THE SKILLS ARE PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SKILLS OR THE USE OR OTHER DEALINGS IN THE SKILLS.
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: clickzetta-external-catalog
3
+ description: |
4
+ 配置和使用 ClickZetta Lakehouse External Catalog,实现对 Hive、Iceberg、Databricks、
5
+ Snowflake Open Catalog 等外部数据源的联邦查询(只读)。覆盖完整创建流程:存储连接 →
6
+ Catalog Connection → External Catalog,以及 SHOW/DESC/查询外部表等操作。
7
+ 支持数据源:Hive(OSS/COS/S3/HDFS)、Databricks Unity Catalog、
8
+ Snowflake Open Catalog(通过 Iceberg,OAuth 认证)。
9
+ 当用户说"外部数据目录"、"External Catalog"、"联邦查询"、"Hive 联邦"、
10
+ "访问 Hive 数据"、"Databricks 联邦"、"Iceberg 联邦"、"跨数据源查询"、
11
+ "不迁移数据直接查询"、"Catalog Connection"、"Snowflake 联邦"、
12
+ "访问 Snowflake 数据"时触发。
13
+ Keywords: external catalog, Hive, Iceberg, Databricks, Snowflake, federation, read-only
14
+ ---
15
+
16
+ # ClickZetta External Catalog
17
+
18
+ > ⚠️ 创建 External Catalog 需要 `instance_admin` 角色。查询权限可通过 GRANT 授予其他用户。
19
+
20
+ 阅读 [references/external-catalog-ddl.md](references/external-catalog-ddl.md) 了解完整语法。
21
+
22
+ ## 概述
23
+
24
+ External Catalog 让 Lakehouse 可以**不迁移数据**,直接对外部数据系统(Hive、Iceberg、Databricks)执行只读联邦查询。
25
+
26
+ **支持数据源**:Apache Hive · Iceberg REST Catalog · Databricks Unity Catalog
27
+
28
+ ---
29
+
30
+ ## 创建流程(三步)
31
+
32
+ ### 步骤 1:创建存储连接
33
+
34
+ ```sql
35
+ -- 阿里云 OSS
36
+ CREATE STORAGE CONNECTION IF NOT EXISTS catalog_storage_oss
37
+ TYPE OSS
38
+ ACCESS_ID = 'LTAIxxxxxxxxxxxx'
39
+ ACCESS_KEY = 'T8Gexxxxxxmtxxxxxx'
40
+ ENDPOINT = 'oss-cn-hangzhou-internal.aliyuncs.com';
41
+ ```
42
+
43
+ ### 步骤 2:创建 Catalog Connection
44
+
45
+ ```sql
46
+ CREATE CATALOG CONNECTION IF NOT EXISTS hive_catalog_conn
47
+ TYPE hms
48
+ hive_metastore_uris = 'hms-host:9083'
49
+ storage_connection = 'catalog_storage_oss';
50
+ ```
51
+
52
+ ### 步骤 3:创建 External Catalog
53
+
54
+ ```sql
55
+ -- ⚠️ CREATE EXTERNAL CATALOG 不支持 COMMENT 子句,加了会报错
56
+ -- ❌ 错误:CREATE EXTERNAL CATALOG my_hive_catalog CONNECTION hive_catalog_conn COMMENT '...';
57
+ -- ✅ 正确:
58
+ CREATE EXTERNAL CATALOG my_hive_catalog
59
+ CONNECTION hive_catalog_conn;
60
+
61
+ -- 如需带选项(如 Iceberg REST):
62
+ CREATE EXTERNAL CATALOG my_iceberg_catalog
63
+ CONNECTION iceberg_conn
64
+ OPTIONS ('key1' = 'value1', 'key2' = 'value2');
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 验证连通性
70
+
71
+ ```sql
72
+ -- 查看 Schema 列表(验证连通)
73
+ SHOW SCHEMAS IN my_hive_catalog;
74
+
75
+ -- 查看表列表
76
+ SHOW TABLES IN my_hive_catalog.my_schema;
77
+
78
+ -- 查询数据
79
+ SELECT * FROM my_hive_catalog.my_schema.my_table LIMIT 10;
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 查看与管理
85
+
86
+ ```sql
87
+ -- 列出所有 Catalog
88
+ SHOW CATALOGS;
89
+
90
+ -- 查看 Catalog 详情
91
+ DESC CATALOG my_hive_catalog;
92
+
93
+ -- 查看表结构
94
+ DESC TABLE my_hive_catalog.my_schema.my_table;
95
+
96
+ -- 删除 Catalog
97
+ DROP CATALOG IF EXISTS my_hive_catalog;
98
+ ```
99
+
100
+ ---
101
+
102
+ ## 联邦查询示例
103
+
104
+ ```sql
105
+ -- 外部 Hive 表 JOIN 内部 Lakehouse 表
106
+ SELECT h.order_id, h.amount, d.region_name
107
+ FROM my_hive_catalog.sales.orders h
108
+ JOIN public.dim_region d ON h.region_id = d.id
109
+ WHERE h.order_date >= '2024-01-01';
110
+ ```
111
+
112
+ ⚠️ 必须使用三层命名空间语法:`catalog.schema.table`
113
+
114
+ ---
115
+
116
+ ## 常见问题
117
+
118
+ | 问题 | 原因 | 解决方案 |
119
+ |---|---|---|
120
+ | 无法连接 HMS | 网络未打通 | 通过 PrivateLink 打通 Lakehouse 与 HMS 服务器网络 |
121
+ | 权限不足 | 非 instance_admin | 联系管理员授予 instance_admin 角色 |
122
+ | 查询报错找不到表 | 未使用三层语法 | 使用 `catalog.schema.table` 格式 |
123
+ | Databricks 连接失败 | 不在同一云平台 | 确保 Databricks 存储与 Lakehouse 在同一云平台 |
@@ -0,0 +1,5 @@
1
+ {"case_id":"001","type":"should_call","user_input":"怎么在 ClickZetta 里直接查询 Hive 的数据?","expected_skill":"clickzetta-external-catalog","expected_output_contains":["External Catalog","CREATE CATALOG CONNECTION"]}
2
+ {"case_id":"002","type":"should_call","user_input":"怎么创建 External Catalog 连接 Iceberg REST Catalog?","expected_skill":"clickzetta-external-catalog","expected_output_contains":["CREATE EXTERNAL CATALOG","iceberg"]}
3
+ {"case_id":"003","type":"should_call","user_input":"联邦查询外部表的三层命名空间怎么写?","expected_skill":"clickzetta-external-catalog","expected_output_contains":["catalog.schema.table"]}
4
+ {"case_id":"004","type":"should_call","user_input":"怎么不迁移数据直接查询 Databricks 的表?","expected_skill":"clickzetta-external-catalog","expected_output_contains":["Databricks","External Catalog"]}
5
+ {"case_id":"005","type":"should_call","user_input":"创建 External Catalog 需要什么权限?","expected_skill":"clickzetta-external-catalog","expected_output_contains":["instance_admin"]}
@@ -0,0 +1,130 @@
1
+ # External Catalog 参考
2
+
3
+ > 来源:https://www.yunqi.tech/documents/external-catalog-summary 等
4
+
5
+ > ⚠️ External Catalog 当前处于公开预览阶段。目前只有 instance admin 角色可以查询 Catalog。
6
+
7
+ ## 概述
8
+
9
+ External Catalog 映射外部数据系统(Hive、Iceberg、Databricks)的数据库,使 Lakehouse 可对其执行**只读**联邦查询。
10
+
11
+ **支持的数据源**:
12
+ - Apache Hive(通过 Hive Metastore)
13
+ - Iceberg REST Catalog(如 Snowflake OpenCatalog)
14
+ - Databricks Unity Catalog
15
+
16
+ ---
17
+
18
+ ## 创建流程(以 Hive 为例)
19
+
20
+ ### 步骤 1:创建存储连接
21
+
22
+ ```sql
23
+ -- OSS
24
+ CREATE STORAGE CONNECTION IF NOT EXISTS catalog_storage_oss
25
+ TYPE OSS
26
+ ACCESS_ID = 'LTAIxxxxxxxxxxxx'
27
+ ACCESS_KEY = 'T8Gexxxxxxmtxxxxxx'
28
+ ENDPOINT = 'oss-cn-hangzhou-internal.aliyuncs.com';
29
+
30
+ -- COS
31
+ CREATE STORAGE CONNECTION IF NOT EXISTS catalog_storage_cos
32
+ TYPE COS
33
+ ACCESS_KEY = '<access_key>'
34
+ SECRET_KEY = '<secret_key>'
35
+ REGION = 'ap-shanghai'
36
+ APP_ID = '1310000503';
37
+
38
+ -- S3
39
+ CREATE STORAGE CONNECTION IF NOT EXISTS catalog_storage_s3
40
+ TYPE S3
41
+ ACCESS_KEY = '<access_key>'
42
+ SECRET_KEY = '<secret_key>'
43
+ REGION = 'us-east-1';
44
+ ```
45
+
46
+ ### 步骤 2:创建 Catalog Connection
47
+
48
+ ```sql
49
+ -- Hive Metastore
50
+ CREATE CATALOG CONNECTION IF NOT EXISTS catalog_api_connection
51
+ TYPE hms
52
+ hive_metastore_uris = 'host:9083'
53
+ storage_connection = 'catalog_storage_oss';
54
+ ```
55
+
56
+ 参数说明:
57
+ - `type`:连接类型,目前支持 `hms`(Hive Metastore Service)
58
+ - `hive_metastore_uris`:HMS 服务地址,格式 `host:port`,端口通常为 9083
59
+ - `storage_connection`:已创建的存储连接名称
60
+
61
+ ### 步骤 3:创建 External Catalog
62
+
63
+ ```sql
64
+ CREATE EXTERNAL CATALOG my_external_catalog
65
+ CONNECTION catalog_api_connection;
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 查看 Catalog
71
+
72
+ ```sql
73
+ -- 列出所有 Catalog
74
+ SHOW CATALOGS;
75
+
76
+ -- 查看 Catalog 详情
77
+ DESC CATALOG my_external_catalog;
78
+ DESC CATALOG EXTENDED my_external_catalog;
79
+ ```
80
+
81
+ ---
82
+
83
+ ## 查看 Catalog 下的对象
84
+
85
+ ```sql
86
+ -- 查看 Schema 列表
87
+ SHOW SCHEMAS IN my_external_catalog;
88
+
89
+ -- 查看 Schema 列表(含类型:managed/external)
90
+ SHOW SCHEMAS EXTENDED IN my_external_catalog;
91
+
92
+ -- 查看表列表
93
+ SHOW TABLES IN my_external_catalog.my_schema;
94
+
95
+ -- 查看表结构
96
+ DESC TABLE my_external_catalog.my_schema.my_table;
97
+ ```
98
+
99
+ ---
100
+
101
+ ## 查询外部数据
102
+
103
+ ```sql
104
+ -- 三层命名空间语法(必须)
105
+ SELECT * FROM my_external_catalog.my_schema.my_table;
106
+
107
+ -- 联邦查询(外部表 JOIN 内部表)
108
+ SELECT e.*, i.region
109
+ FROM my_external_catalog.hive_schema.orders e
110
+ JOIN public.dim_region i ON e.region_id = i.id;
111
+ ```
112
+
113
+ ⚠️ 查询 External Catalog 下的表**必须**使用三层结构语法(catalog.schema.table),不支持 `USE` 切换 catalog。
114
+
115
+ ---
116
+
117
+ ## 删除 Catalog
118
+
119
+ ```sql
120
+ DROP CATALOG IF EXISTS my_external_catalog;
121
+ ```
122
+
123
+ ---
124
+
125
+ ## 注意事项
126
+
127
+ - External Catalog 为**只读**,不支持写入操作
128
+ - HMS 所在服务器网络需与 Lakehouse 打通(可通过 PrivateLink 实现)
129
+ - 目前只有 `instance_admin` 角色可以创建和查询 External Catalog
130
+ - Databricks Unity Catalog 要求与 Lakehouse 在同一云平台(如同在 AWS 上)
@@ -0,0 +1,16 @@
1
+ ClickZetta Skills License
2
+ © 2026 Yunqi Inc. All rights reserved.
3
+ LICENSE: Use of these materials (including all code, prompts, assets, files, and other components of these skills (collectively, "Skills")) is governed by your agreement with ClickZetta for the Service. If no separate agreement exists, use is governed by ClickZetta's Terms of Service (available at: https://yunqi.tech/documents/user-aggrement).
4
+ Your applicable agreement is referred to as the "Agreement." "Service" is as defined in the Agreement.
5
+ ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the contrary, you may not:
6
+
7
+ Extract from the Service or retain copies of the Skills outside use with the Service;
8
+ Reproduce or copy the Skills, except for temporary copies created automatically during authorized use of the Service;
9
+ Create derivative works based on the Skills;
10
+ Distribute, sublicense, or transfer the Skills to any third party;
11
+ Make, offer to sell, sell, or import any inventions embodied in the Skills; nor,
12
+ Reverse engineer, decompile, or disassemble the Skills.
13
+
14
+ The receipt, viewing, or possession of the Skills does not convey or imply any license or right beyond those expressly granted above.
15
+ Yunqi retains all rights, title, and interest in the Skills, including all copyrights, trademarks, patents, and all other applicable intellectual property rights.
16
+ THE SKILLS ARE PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SKILLS OR THE USE OR OTHER DEALINGS IN THE SKILLS.
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: clickzetta-external-function
3
+ description: |
4
+ 在 ClickZetta Lakehouse 中创建和使用外部函数(External Function / UDF),
5
+ 通过 Python 或 Java 扩展 SQL 计算能力,调用 LLM、图像识别、自定义算法等外部服务。
6
+ 覆盖 CREATE API CONNECTION(阿里云FC/腾讯云SCF/AWS Lambda)、
7
+ CREATE EXTERNAL FUNCTION、Python UDF 代码结构与打包、
8
+ 内置 AI_COMPLETE 和 AI_EMBEDDING 函数的使用。
9
+ 当用户说"外部函数"、"UDF"、"自定义函数"、"External Function"、
10
+ "Remote Function"、"调用 LLM"、"AI_COMPLETE"、"AI_EMBEDDING"、
11
+ "文本向量化"、"调用阿里云函数计算"、"调用云函数"、"Python UDF"、
12
+ "Java UDF"、"CREATE EXTERNAL FUNCTION"时触发。
13
+ Keywords: external function, UDF, Python UDF, Java UDF, LLM, custom function
14
+ ---
15
+
16
+ # ClickZetta External Function
17
+
18
+ External Function 让 SQL 可以调用外部计算能力(LLM、图像识别、自定义算法),通过 Python/Java 编写函数逻辑,部署在云函数服务上执行。
19
+
20
+ 阅读 [references/external-function-ddl.md](references/external-function-ddl.md) 了解完整语法。
21
+
22
+ ---
23
+
24
+ ## 两种使用路径
25
+
26
+ | 路径 | 适用场景 | 复杂度 |
27
+ |---|---|---|
28
+ | **内置 AI 函数**(AI_COMPLETE / AI_EMBEDDING) | 调用 LLM 生成文本、文本向量化 | 低,只需创建 API Connection |
29
+ | **External Function** | 自定义算法、图像处理、私有模型 | 高,需部署云函数 |
30
+
31
+ ---
32
+
33
+ ## 路径一:内置 AI 函数(推荐)
34
+
35
+ ### 1. 创建 AI API Connection
36
+
37
+ ```sql
38
+ CREATE API CONNECTION conn_bailian
39
+ TYPE ai_function
40
+ PROVIDER = 'bailian'
41
+ BASE_URL = 'https://dashscope.aliyuncs.com/api/v1'
42
+ API_KEY = '<key>';
43
+ ```
44
+
45
+ ### 2. AI_COMPLETE — 调用 LLM
46
+
47
+ ```sql
48
+ -- 文本摘要
49
+ SELECT id,
50
+ AI_COMPLETE('connection:conn_bailian', '请用一句话总结:' || content) AS summary
51
+ FROM articles;
52
+
53
+ -- 情感分析
54
+ SELECT id, review,
55
+ AI_COMPLETE('connection:conn_bailian',
56
+ '判断以下评论的情感(正面/负面/中性),只返回一个词:' || review) AS sentiment
57
+ FROM user_reviews;
58
+
59
+ -- 通过平台 Endpoint(管理员预配置)
60
+ SELECT AI_COMPLETE('endpoint:my_llm_endpoint', prompt_col) AS result
61
+ FROM my_table;
62
+ ```
63
+
64
+ ### 3. AI_EMBEDDING — 文本向量化
65
+
66
+ ```sql
67
+ -- 批量生成 embedding
68
+ SELECT id, content,
69
+ AI_EMBEDDING('connection:conn_bailian', content) AS vec
70
+ FROM documents;
71
+
72
+ -- 语义搜索(结合向量索引)
73
+ SELECT id, content,
74
+ cosine_distance(vec, AI_EMBEDDING('connection:conn_bailian', '用户查询')) AS dist
75
+ FROM doc_embeddings
76
+ ORDER BY dist
77
+ LIMIT 10;
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 路径二:External Function(自定义 UDF)
83
+
84
+ ### 整体流程
85
+
86
+ ```
87
+ 1. 开通云函数服务(阿里云FC / 腾讯云SCF / AWS Lambda)
88
+ 2. 编写 Python/Java 函数代码
89
+ 3. 打包上传到对象存储或 User Volume
90
+ 4. 授权 Lakehouse 访问云函数服务(RAM 角色)
91
+ 5. CREATE API CONNECTION
92
+ 6. CREATE EXTERNAL FUNCTION
93
+ 7. 在 SQL 中调用
94
+ ```
95
+
96
+ ### 步骤 1:创建云函数 API Connection
97
+
98
+ ```sql
99
+ -- 阿里云 FC
100
+ CREATE API CONNECTION IF NOT EXISTS my_fc_conn
101
+ TYPE CLOUD_FUNCTION
102
+ PROVIDER = 'aliyun'
103
+ REGION = 'cn-shanghai'
104
+ ROLE_ARN = 'acs:ram::1234567890:role/CzUDFRole'
105
+ NAMESPACE = 'default'
106
+ CODE_BUCKET = 'my-oss-bucket';
107
+
108
+ -- 腾讯云 SCF
109
+ CREATE API CONNECTION IF NOT EXISTS my_scf_conn
110
+ TYPE CLOUD_FUNCTION
111
+ PROVIDER = 'tencent'
112
+ REGION = 'ap-shanghai'
113
+ ROLE_ARN = 'qcs::cam::uin/1234567890:roleName/CzUDFRole'
114
+ NAMESPACE = 'default'
115
+ CODE_BUCKET = 'my-cos-bucket';
116
+ ```
117
+
118
+ ### 步骤 2:编写 Python UDF
119
+
120
+ ```python
121
+ # upper.py
122
+ try:
123
+ from cz.udf import annotate
124
+ except ImportError:
125
+ annotate = lambda _: lambda _: _
126
+
127
+ @annotate("string->string")
128
+ class Upper(object):
129
+ def evaluate(self, arg):
130
+ if arg is None:
131
+ return None
132
+ return arg.upper()
133
+ ```
134
+
135
+ 打包上传:
136
+ ```bash
137
+ zip -rq upper.zip upper.py
138
+ ```
139
+
140
+ ```sql
141
+ -- 上传到 User Volume(在 ClickZetta Studio 或 CLI 中执行,source_path 使用绝对路径)
142
+ PUT '/path/to/upper.zip' TO USER VOLUME;
143
+ ```
144
+
145
+ ### 步骤 3:创建 External Function
146
+
147
+ ```sql
148
+ -- ⚠️ CREATE EXTERNAL FUNCTION 不支持 OR REPLACE,只支持 IF NOT EXISTS
149
+ -- ❌ 错误:CREATE OR REPLACE EXTERNAL FUNCTION ...
150
+ -- ✅ 正确:
151
+ -- 使用 User Volume 存放代码(无需 OSS)
152
+ CREATE EXTERNAL FUNCTION IF NOT EXISTS public.str_upper
153
+ AS 'upper.Upper'
154
+ USING FILE = 'volume:user://~/upper.zip'
155
+ CONNECTION = my_fc_conn
156
+ WITH PROPERTIES ('remote.udf.api' = 'python3.mc.v0')
157
+ COMMENT '字符串转大写';
158
+
159
+ -- 使用 OSS 存放代码
160
+ CREATE EXTERNAL FUNCTION IF NOT EXISTS public.str_upper
161
+ AS 'upper.Upper'
162
+ USING FILE = 'oss://my-bucket/functions/upper.zip'
163
+ CONNECTION = my_fc_conn
164
+ WITH PROPERTIES ('remote.udf.api' = 'python3.mc.v0');
165
+ ```
166
+
167
+ ### 步骤 4:调用函数
168
+
169
+ ```sql
170
+ -- ⚠️ 调用外部函数必须使用完整 Schema 路径,不能省略 schema
171
+ -- ❌ 错误:SELECT str_upper(name) FROM my_table;
172
+ -- ✅ 正确:
173
+ SELECT id, public.str_upper(name) AS upper_name FROM my_table;
174
+ ```
175
+
176
+ ---
177
+
178
+ ## 管理操作
179
+
180
+ ```sql
181
+ -- 查看所有外部函数
182
+ SHOW EXTERNAL FUNCTIONS;
183
+ SHOW EXTERNAL FUNCTIONS LIKE 'str_%';
184
+
185
+ -- 删除函数(注意:用 DROP FUNCTION,不是 DROP EXTERNAL FUNCTION)
186
+ DROP FUNCTION IF EXISTS public.str_upper;
187
+ ```
188
+
189
+ > ⚠️ **注意**:`CREATE FUNCTION`(SQL 内联函数)只支持 SQL 表达式,不支持 Python/JavaScript 等编程语言。需要编程语言逻辑请使用 `CREATE EXTERNAL FUNCTION`。
190
+
191
+ ---
192
+
193
+ ## 常见问题
194
+
195
+ | 问题 | 原因 | 解决方案 |
196
+ |---|---|---|
197
+ | 函数调用超时 | 云函数冷启动或执行慢 | 增大超时配置,或预热函数 |
198
+ | 依赖库 ABI 不兼容 | 在 macOS/Windows 打包 | 用 `quay.io/pypa/manylinux2014_x86_64` 容器打包 |
199
+ | 代码包 > 500MB | 依赖过大 | 改用容器镜像方式部署 |
200
+ | AI_COMPLETE 报错 | API Key 无效或余额不足 | 检查 API Connection 的 API_KEY |
201
+ | ROLE_ARN 权限不足 | RAM 角色未授权 | 参考文档配置 AliyunFCFullAccess + OSS 权限 |
202
+ | 函数调用报"not found" | 省略了 Schema 前缀 | 必须用完整路径:`schema.function_name(...)` |
203
+ | CREATE OR REPLACE 报错 | EXTERNAL FUNCTION 不支持 OR REPLACE | 改用 `CREATE EXTERNAL FUNCTION IF NOT EXISTS` |
@@ -0,0 +1,4 @@
1
+ {"case_id":"001","type":"should_call","user_input":"怎么创建一个调用 LLM 的外部函数?需要哪些步骤?","expected_skill":"clickzetta-external-function","expected_output_contains":["API CONNECTION","EXTERNAL FUNCTION"]}
2
+ {"case_id":"002","type":"should_call","user_input":"AI_COMPLETE 和 AI_EMBEDDING 内置函数怎么用?","expected_skill":"clickzetta-external-function","expected_output_contains":["AI_COMPLETE","AI_EMBEDDING"]}
3
+ {"case_id":"003","type":"should_call","user_input":"Python UDF 的代码结构和打包方式是什么?","expected_skill":"clickzetta-external-function","expected_output_contains":["Python","def"]}
4
+ {"case_id":"004","type":"should_call","user_input":"怎么创建 API CONNECTION 连接阿里云函数计算?","expected_skill":"clickzetta-external-function","expected_output_contains":["API CONNECTION"]}
@@ -0,0 +1,171 @@
1
+ # External Function DDL 参考
2
+
3
+ > 来源:https://www.yunqi.tech/documents/CREATE_EXTERNATL_FUNCTION 等
4
+
5
+ ## 概念
6
+
7
+ External Function(外部函数)是通过 Python/Java 编写、在云函数服务(阿里云 FC / 腾讯云 SCF / AWS Lambda)上执行的自定义 UDF。可调用:
8
+ - **在线服务**:LLM API、图像识别 API 等
9
+ - **离线模型**:打包上传的 Hugging Face 模型等
10
+
11
+ 支持函数类型:UDF(标量)、UDAF(聚合,仅 Java)、UDTF(表函数,仅 Java)
12
+
13
+ ---
14
+
15
+ ## CREATE API CONNECTION(云函数连接)
16
+
17
+ ```sql
18
+ CREATE API CONNECTION IF NOT EXISTS my_fc_conn
19
+ TYPE CLOUD_FUNCTION
20
+ PROVIDER = 'aliyun' -- 'aliyun' | 'tencent' | 'aws'
21
+ REGION = 'cn-shanghai'
22
+ ROLE_ARN = 'acs:ram::1234567890:role/CzUDFRole'
23
+ NAMESPACE = 'default' -- 腾讯云必填,其他填 'default'
24
+ CODE_BUCKET = 'my-oss-bucket';
25
+ ```
26
+
27
+ | 参数 | 说明 |
28
+ |---|---|
29
+ | PROVIDER | `'aliyun'` / `'tencent'` / `'aws'` |
30
+ | REGION | 阿里云:`cn-shanghai`;腾讯云:`ap-beijing`;AWS:`cn-northwest-1` |
31
+ | ROLE_ARN | 授权给 Lakehouse 的 RAM 角色 ARN |
32
+ | NAMESPACE | 腾讯云命名空间(必填);其他填 `'default'` |
33
+ | CODE_BUCKET | 存放函数代码包的 OSS/COS/S3 bucket 名称 |
34
+
35
+ ---
36
+
37
+ ## CREATE EXTERNAL FUNCTION
38
+
39
+ ```sql
40
+ CREATE EXTERNAL FUNCTION IF NOT EXISTS my_schema.my_udf
41
+ AS 'module_name.ClassName'
42
+ USING FILE = 'oss://my-bucket/functions/code.zip'
43
+ CONNECTION = my_fc_conn
44
+ WITH PROPERTIES (
45
+ 'remote.udf.api' = 'python3.mc.v0' -- Python: python3.mc.v0 | Java: java8.hive2.v0
46
+ )
47
+ COMMENT '自定义函数说明';
48
+ ```
49
+
50
+ ### 资源文件地址格式
51
+
52
+ ```
53
+ -- OSS/COS/S3
54
+ oss://bucket-name/path/to/code.zip
55
+ cos://bucket-name/path/to/code.zip
56
+ s3://bucket-name/path/to/code.zip
57
+
58
+ -- User Volume(无需开通对象存储)
59
+ volume:user://~/code.zip
60
+
61
+ -- External Volume
62
+ volume://workspace.schema.volume_name/code.zip
63
+ ```
64
+
65
+ ### WITH PROPERTIES 参数
66
+
67
+ | 参数 | 值 | 说明 |
68
+ |---|---|---|
69
+ | `remote.udf.api` | `python3.mc.v0` | Python 3.10 运行时 |
70
+ | `remote.udf.api` | `java8.hive2.v0` | Java 8 Hive 风格 UDF |
71
+ | `remote.udf.protocol` | `http.arrow.v0` | 默认,访问云函数的协议 |
72
+
73
+ ---
74
+
75
+ ## Python UDF 代码结构
76
+
77
+ ```python
78
+ #!/usr/bin/env python
79
+ try:
80
+ from cz.udf import annotate
81
+ except ImportError:
82
+ annotate = lambda _: lambda _: _
83
+
84
+ @annotate("string->string") # 函数签名:输入类型->返回类型
85
+ class Upper(object):
86
+ def evaluate(self, arg):
87
+ if arg is None:
88
+ return None
89
+ return arg.upper()
90
+ ```
91
+
92
+ ### 函数签名格式
93
+
94
+ ```
95
+ "input_type1,input_type2->return_type"
96
+
97
+ # 示例
98
+ "string->string" # 字符串转字符串
99
+ "string,int->double" # 两个输入,返回 double
100
+ "string->array<string>" # 返回数组
101
+ ```
102
+
103
+ 支持类型:`string`、`int`、`bigint`、`double`、`float`、`boolean`、`array<T>`、`map<K,V>`
104
+
105
+ ### 打包上传
106
+
107
+ ```bash
108
+ # 安装依赖到当前目录
109
+ pip3 install httpx pydantic -t .
110
+
111
+ # 打包(< 500MB)
112
+ zip -rq code.zip ./*
113
+ ```
114
+
115
+ ```sql
116
+ -- 上传到 User Volume(在 ClickZetta Studio 或 CLI 中执行,source_path 使用绝对路径)
117
+ PUT '/path/to/code.zip' TO USER VOLUME;
118
+ ```
119
+
120
+ ---
121
+
122
+ ## 管理操作
123
+
124
+ ```sql
125
+ -- 查看外部函数列表
126
+ SHOW EXTERNAL FUNCTIONS;
127
+ SHOW EXTERNAL FUNCTIONS LIKE 'my_%';
128
+
129
+ -- 删除外部函数
130
+ DROP FUNCTION IF EXISTS my_schema.my_udf;
131
+ ```
132
+
133
+ ---
134
+
135
+ ## 内置 AI 函数(无需部署云函数)
136
+
137
+ ### AI_COMPLETE(调用 LLM)
138
+
139
+ ```sql
140
+ -- 通过 API Connection 调用(需先创建连接)
141
+ CREATE API CONNECTION conn_bailian
142
+ TYPE ai_function
143
+ PROVIDER = 'bailian'
144
+ BASE_URL = 'https://dashscope.aliyuncs.com/api/v1'
145
+ API_KEY = '<key>';
146
+
147
+ -- 调用 LLM 生成文本
148
+ SELECT AI_COMPLETE('connection:conn_bailian', '请用一句话总结:' || content) AS summary
149
+ FROM articles
150
+ LIMIT 10;
151
+
152
+ -- 通过平台 Endpoint 调用(管理员预配置)
153
+ SELECT AI_COMPLETE('endpoint:my_llm_endpoint', prompt_col) AS result
154
+ FROM my_table;
155
+ ```
156
+
157
+ ### AI_EMBEDDING(文本向量化)
158
+
159
+ ```sql
160
+ -- 将文本转为向量(用于语义搜索)
161
+ SELECT id, content,
162
+ AI_EMBEDDING('connection:conn_bailian', content) AS embedding
163
+ FROM documents;
164
+
165
+ -- 结合向量索引做语义搜索
166
+ SELECT id, content,
167
+ cosine_distance(embedding, AI_EMBEDDING('connection:conn_bailian', '查询文本')) AS dist
168
+ FROM doc_embeddings
169
+ ORDER BY dist
170
+ LIMIT 10;
171
+ ```
@@ -0,0 +1,16 @@
1
+ ClickZetta Skills License
2
+ © 2026 Yunqi Inc. All rights reserved.
3
+ LICENSE: Use of these materials (including all code, prompts, assets, files, and other components of these skills (collectively, "Skills")) is governed by your agreement with ClickZetta for the Service. If no separate agreement exists, use is governed by ClickZetta's Terms of Service (available at: https://yunqi.tech/documents/user-aggrement).
4
+ Your applicable agreement is referred to as the "Agreement." "Service" is as defined in the Agreement.
5
+ ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the contrary, you may not:
6
+
7
+ Extract from the Service or retain copies of the Skills outside use with the Service;
8
+ Reproduce or copy the Skills, except for temporary copies created automatically during authorized use of the Service;
9
+ Create derivative works based on the Skills;
10
+ Distribute, sublicense, or transfer the Skills to any third party;
11
+ Make, offer to sell, sell, or import any inventions embodied in the Skills; nor,
12
+ Reverse engineer, decompile, or disassemble the Skills.
13
+
14
+ The receipt, viewing, or possession of the Skills does not convey or imply any license or right beyond those expressly granted above.
15
+ Yunqi retains all rights, title, and interest in the Skills, including all copyrights, trademarks, patents, and all other applicable intellectual property rights.
16
+ THE SKILLS ARE PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SKILLS OR THE USE OR OTHER DEALINGS IN THE SKILLS.