@clickzetta/cz-cli-darwin-x64 0.3.80 → 0.3.81

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/package.json +1 -1
  3. package/bin/skills/clickzetta-access-control/LICENSE +0 -16
  4. package/bin/skills/clickzetta-access-control/SKILL.md +0 -243
  5. package/bin/skills/clickzetta-access-control/eval_cases.jsonl +0 -3
  6. package/bin/skills/clickzetta-access-control/references/dynamic-masking.md +0 -86
  7. package/bin/skills/clickzetta-access-control/references/grant-revoke.md +0 -103
  8. package/bin/skills/clickzetta-access-control/references/role-management.md +0 -66
  9. package/bin/skills/clickzetta-access-control/references/user-management.md +0 -61
  10. package/bin/skills/clickzetta-app-python-sdk/LICENSE +0 -16
  11. package/bin/skills/clickzetta-app-python-sdk/SKILL.md +0 -153
  12. package/bin/skills/clickzetta-app-python-sdk/eval_cases.jsonl +0 -12
  13. package/bin/skills/clickzetta-app-python-sdk/references/bulkload.md +0 -196
  14. package/bin/skills/clickzetta-app-python-sdk/references/connector.md +0 -143
  15. package/bin/skills/clickzetta-app-python-sdk/references/realtime.md +0 -122
  16. package/bin/skills/clickzetta-batch-sync-pipeline/LICENSE +0 -16
  17. package/bin/skills/clickzetta-batch-sync-pipeline/SKILL.md +0 -227
  18. package/bin/skills/clickzetta-batch-sync-pipeline/eval_cases.jsonl +0 -5
  19. package/bin/skills/clickzetta-bi-connect/LICENSE +0 -16
  20. package/bin/skills/clickzetta-bi-connect/SKILL.md +0 -176
  21. package/bin/skills/clickzetta-bi-connect/eval_cases.jsonl +0 -5
  22. package/bin/skills/clickzetta-bi-connect/references/bi-tools.md +0 -170
  23. package/bin/skills/clickzetta-cdc-sync-pipeline/LICENSE +0 -16
  24. package/bin/skills/clickzetta-cdc-sync-pipeline/SKILL.md +0 -633
  25. package/bin/skills/clickzetta-cdc-sync-pipeline/eval_cases.jsonl +0 -5
  26. package/bin/skills/clickzetta-data-ingest-pipeline/LICENSE +0 -16
  27. package/bin/skills/clickzetta-data-ingest-pipeline/SKILL.md +0 -237
  28. package/bin/skills/clickzetta-data-ingest-pipeline/eval_cases.jsonl +0 -5
  29. package/bin/skills/clickzetta-data-retention/LICENSE +0 -16
  30. package/bin/skills/clickzetta-data-retention/SKILL.md +0 -160
  31. package/bin/skills/clickzetta-data-retention/eval_cases.jsonl +0 -5
  32. package/bin/skills/clickzetta-data-retention/references/lifecycle-reference.md +0 -175
  33. package/bin/skills/clickzetta-data-science/LICENSE +0 -16
  34. package/bin/skills/clickzetta-data-science/SKILL.md +0 -125
  35. package/bin/skills/clickzetta-data-science/eval_cases.jsonl +0 -12
  36. package/bin/skills/clickzetta-data-science/references/bitmap-profile.md +0 -146
  37. package/bin/skills/clickzetta-data-science/references/data-patterns.md +0 -110
  38. package/bin/skills/clickzetta-data-science/references/setup.md +0 -160
  39. package/bin/skills/clickzetta-data-science/references/stats-functions.md +0 -195
  40. package/bin/skills/clickzetta-data-science/references/write-and-infer.md +0 -122
  41. package/bin/skills/clickzetta-data-science/references/zettapark-api.md +0 -156
  42. package/bin/skills/clickzetta-data-sharing/LICENSE +0 -16
  43. package/bin/skills/clickzetta-data-sharing/SKILL.md +0 -160
  44. package/bin/skills/clickzetta-data-sharing/eval_cases.jsonl +0 -3
  45. package/bin/skills/clickzetta-data-sharing/references/share-ddl.md +0 -134
  46. package/bin/skills/clickzetta-dba-guide/LICENSE +0 -16
  47. package/bin/skills/clickzetta-dba-guide/SKILL.md +0 -542
  48. package/bin/skills/clickzetta-dba-guide/eval_cases.jsonl +0 -3
  49. package/bin/skills/clickzetta-dw-modeling/LICENSE +0 -16
  50. package/bin/skills/clickzetta-dw-modeling/SKILL.md +0 -351
  51. package/bin/skills/clickzetta-dw-modeling/eval_cases.jsonl +0 -4
  52. package/bin/skills/clickzetta-dw-modeling/references/modeling-patterns.md +0 -100
  53. package/bin/skills/clickzetta-dynamic-table/LICENSE +0 -16
  54. package/bin/skills/clickzetta-dynamic-table/SKILL.md +0 -230
  55. package/bin/skills/clickzetta-dynamic-table/best-practices/dimension-table-join-guide.md +0 -253
  56. package/bin/skills/clickzetta-dynamic-table/best-practices/medallion-and-stream-patterns.md +0 -124
  57. package/bin/skills/clickzetta-dynamic-table/best-practices/non-partitioned-merge-into-warning.md +0 -96
  58. package/bin/skills/clickzetta-dynamic-table/best-practices/performance-optimization.md +0 -109
  59. package/bin/skills/clickzetta-dynamic-table/best-practices/scheduling-guide.md +0 -135
  60. package/bin/skills/clickzetta-dynamic-table/dt-creator/SKILL.md +0 -15
  61. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/dt-declaration-strategy.md +0 -185
  62. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/incremental-config-reference.md +0 -427
  63. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/refresh-history-guide.md +0 -260
  64. package/bin/skills/clickzetta-dynamic-table/dt-creator/references/sql-limitations.md +0 -80
  65. package/bin/skills/clickzetta-dynamic-table/dynamic-table-alter/SKILL.md +0 -190
  66. package/bin/skills/clickzetta-dynamic-table/eval_cases.jsonl +0 -5
  67. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/SKILL.md +0 -27
  68. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-column-validation-rules.md +0 -118
  69. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-conversion-rules.md +0 -225
  70. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-placeholder-rules.md +0 -182
  71. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-refresh-rules.md +0 -98
  72. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-self-reference-rules.md +0 -76
  73. package/bin/skills/clickzetta-dynamic-table/sql-to-dt/references/sql2dt-workflow.md +0 -109
  74. package/bin/skills/clickzetta-external-catalog/LICENSE +0 -16
  75. package/bin/skills/clickzetta-external-catalog/SKILL.md +0 -123
  76. package/bin/skills/clickzetta-external-catalog/eval_cases.jsonl +0 -5
  77. package/bin/skills/clickzetta-external-catalog/references/external-catalog-ddl.md +0 -130
  78. package/bin/skills/clickzetta-external-function/LICENSE +0 -16
  79. package/bin/skills/clickzetta-external-function/SKILL.md +0 -203
  80. package/bin/skills/clickzetta-external-function/eval_cases.jsonl +0 -4
  81. package/bin/skills/clickzetta-external-function/references/external-function-ddl.md +0 -171
  82. package/bin/skills/clickzetta-file-import-pipeline/LICENSE +0 -16
  83. package/bin/skills/clickzetta-file-import-pipeline/SKILL.md +0 -190
  84. package/bin/skills/clickzetta-file-import-pipeline/eval_cases.jsonl +0 -5
  85. package/bin/skills/clickzetta-index-manager/LICENSE +0 -16
  86. package/bin/skills/clickzetta-index-manager/SKILL.md +0 -140
  87. package/bin/skills/clickzetta-index-manager/eval_cases.jsonl +0 -5
  88. package/bin/skills/clickzetta-index-manager/references/bloomfilter-index.md +0 -67
  89. package/bin/skills/clickzetta-index-manager/references/index-management.md +0 -73
  90. package/bin/skills/clickzetta-index-manager/references/inverted-index.md +0 -80
  91. package/bin/skills/clickzetta-index-manager/references/vector-index.md +0 -81
  92. package/bin/skills/clickzetta-java-sdk/LICENSE +0 -16
  93. package/bin/skills/clickzetta-java-sdk/SKILL.md +0 -186
  94. package/bin/skills/clickzetta-java-sdk/eval_cases.jsonl +0 -12
  95. package/bin/skills/clickzetta-java-sdk/references/bulkload.md +0 -163
  96. package/bin/skills/clickzetta-java-sdk/references/realtime.md +0 -212
  97. package/bin/skills/clickzetta-kafka-ingest-pipeline/LICENSE +0 -16
  98. package/bin/skills/clickzetta-kafka-ingest-pipeline/SKILL.md +0 -769
  99. package/bin/skills/clickzetta-kafka-ingest-pipeline/eval_cases.jsonl +0 -5
  100. package/bin/skills/clickzetta-kafka-ingest-pipeline/references/kafka-pipe-syntax.md +0 -324
  101. package/bin/skills/clickzetta-lakehouse-connect/LICENSE +0 -16
  102. package/bin/skills/clickzetta-lakehouse-connect/SKILL.md +0 -218
  103. package/bin/skills/clickzetta-lakehouse-connect/eval_cases.jsonl +0 -3
  104. package/bin/skills/clickzetta-lakehouse-connect/evals/evals.json +0 -35
  105. package/bin/skills/clickzetta-lakehouse-connect/references/config-file.md +0 -435
  106. package/bin/skills/clickzetta-lakehouse-connect/references/jdbc.md +0 -478
  107. package/bin/skills/clickzetta-lakehouse-connect/references/python-sdk.md +0 -225
  108. package/bin/skills/clickzetta-lakehouse-connect/references/sqlalchemy.md +0 -468
  109. package/bin/skills/clickzetta-lakehouse-connect/references/zettapark-session.md +0 -445
  110. package/bin/skills/clickzetta-manage-comments/LICENSE +0 -16
  111. package/bin/skills/clickzetta-manage-comments/SKILL.md +0 -219
  112. package/bin/skills/clickzetta-manage-comments/eval_cases.jsonl +0 -3
  113. package/bin/skills/clickzetta-metadata/LICENSE +0 -16
  114. package/bin/skills/clickzetta-metadata/SKILL.md +0 -502
  115. package/bin/skills/clickzetta-metadata/eval_cases.jsonl +0 -5
  116. package/bin/skills/clickzetta-metadata/references/instance-views-reference.md +0 -276
  117. package/bin/skills/clickzetta-metadata/references/metering-views-reference.md +0 -137
  118. package/bin/skills/clickzetta-metadata/references/show-desc-reference.md +0 -326
  119. package/bin/skills/clickzetta-metadata/references/views-reference.md +0 -271
  120. package/bin/skills/clickzetta-monitoring/LICENSE +0 -16
  121. package/bin/skills/clickzetta-monitoring/SKILL.md +0 -215
  122. package/bin/skills/clickzetta-monitoring/eval_cases.jsonl +0 -5
  123. package/bin/skills/clickzetta-monitoring/references/job-history-analysis.md +0 -97
  124. package/bin/skills/clickzetta-monitoring/references/show-jobs.md +0 -48
  125. package/bin/skills/clickzetta-oss-ingest-pipeline/LICENSE +0 -16
  126. package/bin/skills/clickzetta-oss-ingest-pipeline/SKILL.md +0 -562
  127. package/bin/skills/clickzetta-oss-ingest-pipeline/eval_cases.jsonl +0 -5
  128. package/bin/skills/clickzetta-overview/LICENSE +0 -16
  129. package/bin/skills/clickzetta-overview/SKILL.md +0 -102
  130. package/bin/skills/clickzetta-overview/eval_cases.jsonl +0 -5
  131. package/bin/skills/clickzetta-overview/references/brands-and-endpoints.md +0 -79
  132. package/bin/skills/clickzetta-overview/references/object-model.md +0 -311
  133. package/bin/skills/clickzetta-overview/references/studio-modules.md +0 -173
  134. package/bin/skills/clickzetta-pipeline-review/LICENSE +0 -16
  135. package/bin/skills/clickzetta-pipeline-review/SKILL.md +0 -377
  136. package/bin/skills/clickzetta-query-optimizer/LICENSE +0 -16
  137. package/bin/skills/clickzetta-query-optimizer/SKILL.md +0 -156
  138. package/bin/skills/clickzetta-query-optimizer/eval_cases.jsonl +0 -5
  139. package/bin/skills/clickzetta-query-optimizer/references/explain.md +0 -56
  140. package/bin/skills/clickzetta-query-optimizer/references/hints-and-sortkey.md +0 -78
  141. package/bin/skills/clickzetta-query-optimizer/references/optimize.md +0 -65
  142. package/bin/skills/clickzetta-query-optimizer/references/result-cache.md +0 -49
  143. package/bin/skills/clickzetta-query-optimizer/references/show-jobs.md +0 -42
  144. package/bin/skills/clickzetta-realtime-sync-pipeline/LICENSE +0 -16
  145. package/bin/skills/clickzetta-realtime-sync-pipeline/SKILL.md +0 -323
  146. package/bin/skills/clickzetta-realtime-sync-pipeline/eval_cases.jsonl +0 -5
  147. package/bin/skills/clickzetta-semantic-view/LICENSE +0 -16
  148. package/bin/skills/clickzetta-semantic-view/SKILL.md +0 -207
  149. package/bin/skills/clickzetta-semantic-view/eval_cases.jsonl +0 -12
  150. package/bin/skills/clickzetta-semantic-view/references/semantic-view-reference.md +0 -167
  151. package/bin/skills/clickzetta-spark-flink-connector/LICENSE +0 -16
  152. package/bin/skills/clickzetta-spark-flink-connector/SKILL.md +0 -92
  153. package/bin/skills/clickzetta-spark-flink-connector/eval_cases.jsonl +0 -5
  154. package/bin/skills/clickzetta-spark-flink-connector/references/flink.md +0 -147
  155. package/bin/skills/clickzetta-spark-flink-connector/references/spark.md +0 -132
  156. package/bin/skills/clickzetta-sql-pipeline-manager/LICENSE +0 -16
  157. package/bin/skills/clickzetta-sql-pipeline-manager/SKILL.md +0 -485
  158. package/bin/skills/clickzetta-sql-pipeline-manager/eval_cases.jsonl +0 -12
  159. package/bin/skills/clickzetta-sql-pipeline-manager/evals/evals.json +0 -166
  160. package/bin/skills/clickzetta-sql-pipeline-manager/references/dynamic-table.md +0 -185
  161. package/bin/skills/clickzetta-sql-pipeline-manager/references/materialized-view.md +0 -129
  162. package/bin/skills/clickzetta-sql-pipeline-manager/references/pipe.md +0 -222
  163. package/bin/skills/clickzetta-sql-pipeline-manager/references/table-stream.md +0 -125
  164. package/bin/skills/clickzetta-sql-syntax-guide/LICENSE +0 -16
  165. package/bin/skills/clickzetta-sql-syntax-guide/SKILL.md +0 -249
  166. package/bin/skills/clickzetta-sql-syntax-guide/eval_cases.jsonl +0 -3
  167. package/bin/skills/clickzetta-sql-syntax-guide/references/ddl-reference.md +0 -350
  168. package/bin/skills/clickzetta-sql-syntax-guide/references/dml-reference.md +0 -279
  169. package/bin/skills/clickzetta-sql-syntax-guide/references/dql-reference.md +0 -504
  170. package/bin/skills/clickzetta-sql-syntax-guide/references/functions-reference.md +0 -372
  171. package/bin/skills/clickzetta-sql-syntax-guide/references/migration-databricks.md +0 -260
  172. package/bin/skills/clickzetta-sql-syntax-guide/references/migration-snowflake.md +0 -382
  173. package/bin/skills/clickzetta-sql-syntax-guide/references/vs-snowflake.md +0 -346
  174. package/bin/skills/clickzetta-sql-syntax-guide/references/vs-spark.md +0 -229
  175. package/bin/skills/clickzetta-studio-task-manager/LICENSE +0 -16
  176. package/bin/skills/clickzetta-studio-task-manager/SKILL.md +0 -652
  177. package/bin/skills/clickzetta-table-lineage/LICENSE +0 -16
  178. package/bin/skills/clickzetta-table-lineage/SKILL.md +0 -90
  179. package/bin/skills/clickzetta-table-lineage/eval_cases.jsonl +0 -1
  180. package/bin/skills/clickzetta-table-lineage/references/normalize_func.sql +0 -14
  181. package/bin/skills/clickzetta-table-lineage/references/table_cost.sql +0 -38
  182. package/bin/skills/clickzetta-table-lineage/references/table_lineage_standalone.html +0 -562
  183. package/bin/skills/clickzetta-table-lineage/references/table_relation.sql +0 -25
  184. package/bin/skills/clickzetta-table-stream-pipeline/LICENSE +0 -16
  185. package/bin/skills/clickzetta-table-stream-pipeline/SKILL.md +0 -206
  186. package/bin/skills/clickzetta-table-stream-pipeline/eval_cases.jsonl +0 -5
  187. package/bin/skills/clickzetta-vcluster-manager/LICENSE +0 -16
  188. package/bin/skills/clickzetta-vcluster-manager/SKILL.md +0 -212
  189. package/bin/skills/clickzetta-vcluster-manager/eval_cases.jsonl +0 -5
  190. package/bin/skills/clickzetta-vcluster-manager/references/vc-cache.md +0 -54
  191. package/bin/skills/clickzetta-vcluster-manager/references/vcluster-ddl.md +0 -150
  192. package/bin/skills/clickzetta-volume-manager/LICENSE +0 -16
  193. package/bin/skills/clickzetta-volume-manager/SKILL.md +0 -292
  194. package/bin/skills/clickzetta-volume-manager/eval_cases.jsonl +0 -5
  195. package/bin/skills/clickzetta-volume-manager/references/volume-ddl.md +0 -199
  196. package/bin/skills/clickzetta-zettapark/LICENSE +0 -16
  197. package/bin/skills/clickzetta-zettapark/SKILL.md +0 -248
  198. package/bin/skills/clickzetta-zettapark/eval_cases.jsonl +0 -12
  199. package/bin/skills/clickzetta-zettapark/references/zettapark-api.md +0 -283
  200. package/bin/skills/cz-cli/SKILL.md +0 -311
  201. package/bin/skills/cz-cli/references/profile-setup.md +0 -120
@@ -1,222 +0,0 @@
1
- # Pipe SQL 参考
2
-
3
- > **⚠️ ClickZetta 特有语法**
4
- > - Kafka 读取函数是 `read_kafka(...)`,使用**位置参数**(不是命名参数 `=>`)
5
- > - JSON 字段提取用 `parse_json(value::string)['field']::TYPE` 语法
6
- > - Pipe 创建后默认自动启动,无需手动 RESUME
7
- > - OSS Pipe 的 `PURGE=true` 紧跟在 `USING <format>` 之后(如 `USING CSV PURGE=true`)
8
-
9
- Pipe 是 ClickZetta Lakehouse 的持续数据导入对象,通过 SQL 定义从 Kafka 或对象存储(OSS/S3/COS)自动、持续地将数据导入目标表,无需外部调度。
10
-
11
- ## CREATE PIPE — 从 Kafka 导入
12
-
13
- ```sql
14
- CREATE [ OR REPLACE ] PIPE <pipe_name>
15
- VIRTUAL_CLUSTER = '<vcluster_name>'
16
- [ BATCH_INTERVAL_IN_SECONDS = '<seconds>' ]
17
- [ BATCH_SIZE_PER_KAFKA_PARTITION = '<count>' ]
18
- [ RESET_KAFKA_GROUP_OFFSETS = '<none|valid|earliest|latest|timestamp_ms>' ]
19
- [ COPY_JOB_HINT = '<json>' ]
20
- AS
21
- COPY INTO <target_table> FROM (
22
- SELECT <expr> [, ...]
23
- FROM read_kafka(
24
- '<bootstrap_servers>', -- 必填:Kafka 集群地址
25
- '<topic>', -- 必填:Topic 名称
26
- '', -- 保留(填空字符串)
27
- '<group_id>', -- 必填:持久消费者组 ID
28
- '', '', '', '', -- 位置参数留空,由 Pipe 自动管理
29
- 'raw', -- key 格式(目前只支持 raw)
30
- 'raw', -- value 格式(目前只支持 raw)
31
- 0, -- max_errors
32
- MAP(<kafka_config>) -- Kafka 配置参数
33
- )
34
- );
35
- ```
36
-
37
- **示例:**
38
- ```sql
39
- -- 从 Kafka 持续导入 JSON 数据
40
- CREATE OR REPLACE PIPE kafka_orders_pipe
41
- VIRTUAL_CLUSTER = 'default'
42
- BATCH_INTERVAL_IN_SECONDS = '60'
43
- AS
44
- COPY INTO ods.orders FROM (
45
- SELECT
46
- j['order_id']::STRING AS order_id,
47
- j['user_id']::STRING AS user_id,
48
- j['amount']::DECIMAL(10,2) AS amount,
49
- j['created_at']::TIMESTAMP AS created_at,
50
- CAST(`timestamp` AS TIMESTAMP) AS kafka_ts
51
- FROM (
52
- SELECT `timestamp`, parse_json(value::string) AS j
53
- FROM read_kafka(
54
- 'kafka.example.com:9092',
55
- 'orders',
56
- '',
57
- 'lakehouse_consumer',
58
- '', '', '', '',
59
- 'raw', 'raw', 0,
60
- MAP('kafka.security.protocol', 'PLAINTEXT')
61
- )
62
- )
63
- );
64
-
65
- -- SASL 认证
66
- CREATE PIPE kafka_secure_pipe
67
- VIRTUAL_CLUSTER = 'pipe_vc'
68
- BATCH_INTERVAL_IN_SECONDS = '60'
69
- AS
70
- COPY INTO ods.secure_events FROM (
71
- SELECT parse_json(value::string)['id']::STRING AS id,
72
- CAST(`timestamp` AS TIMESTAMP) AS kafka_ts
73
- FROM read_kafka(
74
- 'kafka.example.com:9092', 'secure_events', '', 'cz_secure',
75
- '', '', '', '', 'raw', 'raw', 0,
76
- MAP(
77
- 'kafka.security.protocol', 'SASL_PLAINTEXT',
78
- 'kafka.sasl.mechanism', 'PLAIN',
79
- 'kafka.sasl.username', 'my_user',
80
- 'kafka.sasl.password', 'my_password'
81
- )
82
- )
83
- );
84
- ```
85
-
86
- ## 验证 Kafka 连接(创建 Pipe 前)
87
-
88
- 独立使用 `read_kafka` 探查数据时,可以在 MAP 中设置 `kafka.auto.offset.reset`:
89
-
90
- ```sql
91
- -- 验证连接和数据格式
92
- SELECT value::string
93
- FROM read_kafka(
94
- 'kafka.example.com:9092',
95
- 'orders',
96
- '',
97
- 'test_explore',
98
- '', '', '', '',
99
- 'raw', 'raw', 0,
100
- MAP('kafka.security.protocol', 'PLAINTEXT', 'kafka.auto.offset.reset', 'earliest')
101
- )
102
- LIMIT 10;
103
- ```
104
-
105
- > ⚠️ **独立探查 vs Pipe 中的区别**:
106
- > - 独立探查:可在 MAP 中设置 `kafka.auto.offset.reset` 为 `earliest` 读取历史数据
107
- > - Pipe 中:位置参数必须留空,消费位点由 Pipe 的 `RESET_KAFKA_GROUP_OFFSETS` 参数控制
108
-
109
- ## CREATE PIPE — 从对象存储导入
110
-
111
- ```sql
112
- CREATE [ OR REPLACE ] PIPE [ IF NOT EXISTS ] <pipe_name>
113
- VIRTUAL_CLUSTER = '<virtual_cluster_name>'
114
- INGEST_MODE = 'LIST_PURGE' | 'EVENT_NOTIFICATION'
115
- [ COMMENT '<comment>' ]
116
- [ COPY_JOB_HINT = '<hint>' ]
117
- AS
118
- COPY INTO <target_table>
119
- FROM VOLUME <volume_name>
120
- USING <csv | parquet | orc | json> [OPTIONS ('<key>' = '<value>', ...)] PURGE=true;
121
- ```
122
-
123
- **关键参数:**
124
- - `VIRTUAL_CLUSTER`:指定虚拟集群名称(OSS Pipe 必填)
125
- - `INGEST_MODE = 'LIST_PURGE'`:通用模式,定期扫描文件列表,必须设置 `PURGE=true`
126
- - `INGEST_MODE = 'EVENT_NOTIFICATION'`:事件通知模式,低延迟(仅阿里云 OSS + AWS S3),不需要 `PURGE=true`
127
- - `COMMENT 'text'`:不带等号(`COMMENT = 'text'` 会报错)
128
- - `PURGE=true`:放在最后,OPTIONS 在其之前:`USING CSV OPTIONS (...) PURGE=true`
129
- - PIPE 中的 COPY 语句不支持 `files`、`regexp`、`subdirectory` 参数
130
-
131
- **示例:**
132
- ```sql
133
- -- LIST_PURGE 模式(带 OPTIONS)
134
- CREATE OR REPLACE PIPE oss_events_pipe
135
- VIRTUAL_CLUSTER = 'default'
136
- INGEST_MODE = 'LIST_PURGE'
137
- COMMENT 'OSS events pipeline'
138
- AS
139
- COPY INTO ods.events
140
- FROM VOLUME my_oss_volume
141
- USING PARQUET PURGE=true;
142
-
143
- -- CSV 格式带 OPTIONS(OPTIONS 在 PURGE 之前)
144
- CREATE PIPE oss_csv_pipe
145
- VIRTUAL_CLUSTER = 'default'
146
- INGEST_MODE = 'LIST_PURGE'
147
- AS
148
- COPY INTO ods.csv_data
149
- FROM VOLUME my_csv_volume
150
- USING CSV OPTIONS ('header' = 'true', 'sep' = ',') PURGE=true;
151
-
152
- -- EVENT_NOTIFICATION 模式(不需要 PURGE)
153
- CREATE PIPE oss_event_pipe
154
- VIRTUAL_CLUSTER = 'default'
155
- INGEST_MODE = 'EVENT_NOTIFICATION'
156
- ALICLOUD_MNS_QUEUE = 'my-mns-queue-name'
157
- AS
158
- COPY INTO ods.events
159
- FROM VOLUME my_oss_event_volume
160
- USING PARQUET;
161
- ```
162
-
163
- ## 启停 Pipe
164
-
165
- ```sql
166
- -- 暂停 Pipe
167
- ALTER PIPE <pipe_name> SET PIPE_EXECUTION_PAUSED = true;
168
-
169
- -- 恢复 Pipe
170
- ALTER PIPE <pipe_name> SET PIPE_EXECUTION_PAUSED = false;
171
- ```
172
-
173
- ## 修改 Pipe 属性
174
-
175
- ```sql
176
- -- 每次只能修改一个属性
177
- ALTER PIPE <pipe_name> SET VIRTUAL_CLUSTER = 'new_vc';
178
- ALTER PIPE <pipe_name> SET COPY_JOB_HINT = '{"cz.sql.split.kafka.strategy":"size","cz.mapper.kafka.message.size":"200000"}';
179
- ```
180
-
181
- > ⚠️ **ALTER PIPE 支持的属性**:
182
- > - ✅ `PIPE_EXECUTION_PAUSED`
183
- > - ✅ `VIRTUAL_CLUSTER`
184
- > - ✅ `COPY_JOB_HINT`
185
- > - ❌ `BATCH_INTERVAL_IN_SECONDS`(不支持修改,需删除重建)
186
- > - ❌ `BATCH_SIZE_PER_KAFKA_PARTITION`(不支持修改,需删除重建)
187
- >
188
- > 不支持修改 COPY/INSERT 语句逻辑,需删除 Pipe 后重建。
189
- > `COPY_JOB_HINT` 修改会覆盖所有已有 hints,需一次性设置全部参数。
190
-
191
- ## DROP PIPE
192
-
193
- ```sql
194
- DROP PIPE [ IF EXISTS ] <pipe_name>;
195
- ```
196
-
197
- ## SHOW PIPE
198
-
199
- ```sql
200
- -- 列出当前 schema 下所有 Pipe
201
- SHOW PIPES;
202
-
203
- -- 查看 Pipe 详情(状态、延迟、定义)
204
- DESC PIPE <pipe_name>;
205
- DESC PIPE EXTENDED <pipe_name>;
206
- ```
207
-
208
- ## 注意事项
209
-
210
- - Pipe 创建后默认自动启动,无需手动 RESUME
211
- - Kafka Pipe 使用 consumer group 管理 offset,重建 Pipe 时保持相同 group_id 可从上次位点继续
212
- - 对象存储 Pipe 通过文件列表或事件通知检测新文件,`load_history` 去重记录保留 7 天
213
- - Pipe 不支持修改 AS 子句,需要删除后重建(不是 `CREATE OR REPLACE`)
214
- - Kafka Pipe 仅支持 PLAINTEXT 和 SASL_PLAINTEXT 安全协议,不支持 SSL
215
-
216
- ## 参考文档
217
-
218
- - [Pipe 简介](https://www.yunqi.tech/documents/pipe-summary)
219
- - [借助 read_kafka 函数持续导入](https://www.yunqi.tech/documents/pipe-kafka)
220
- - [借助 Kafka 外表 Table Stream 持续导入](https://www.yunqi.tech/documents/pipe-kafka-table-stream)
221
- - [最佳实践:使用 Pipe 高效接入 Kafka 数据](https://www.yunqi.tech/documents/pipe-kafka-bestpractice-1)
222
- - [使用 Pipe 持续导入对象存储数据](https://www.yunqi.tech/documents/pipe-storage-object)
@@ -1,125 +0,0 @@
1
- # Table Stream(表流)SQL 参考
2
-
3
- > **⚠️ ClickZetta 特有语法**
4
- > - 创建语法是 `CREATE TABLE STREAM`,参数放在 `WITH PROPERTIES (...)` 里
5
- > - 元数据字段是 `__change_type`(双下划线),值:`INSERT` / `UPDATE_BEFORE` / `UPDATE_AFTER` / `DELETE`
6
- > - UPDATE 产生两条记录:`UPDATE_BEFORE`(更新前)和 `UPDATE_AFTER`(更新后)
7
- > - 通常只需要 `UPDATE_AFTER` 和 `INSERT`,忽略 `UPDATE_BEFORE`
8
-
9
- Table Stream 捕获源表的变更数据(INSERT / UPDATE / DELETE),是构建 CDC 管道的核心对象。通常与 Dynamic Table 或 SQL 任务配合消费变更数据。
10
-
11
- ## CREATE TABLE STREAM
12
-
13
- ```sql
14
- CREATE [ OR REPLACE ] TABLE STREAM [ IF NOT EXISTS ] <stream_name>
15
- ON TABLE <source_name>
16
- [ TIMESTAMP AS OF <timestamp_expr> ]
17
- [ COMMENT '<comment>' ]
18
- WITH PROPERTIES (
19
- 'TABLE_STREAM_MODE' = 'STANDARD | APPEND_ONLY',
20
- 'SHOW_INITIAL_ROWS' = 'TRUE | FALSE'
21
- );
22
- ```
23
-
24
- **关键参数:**
25
- - `TABLE_STREAM_MODE = STANDARD`(默认):捕获 INSERT、UPDATE、DELETE 所有变更,每行附带 `__change_type` 字段(`INSERT` / `UPDATE_BEFORE` / `UPDATE_AFTER` / `DELETE`)
26
- - `TABLE_STREAM_MODE = APPEND_ONLY`:只捕获 INSERT,性能更好,适合仅追加写入的源表
27
- - `SHOW_INITIAL_ROWS = TRUE`:首次消费返回建 Stream 时表中已有行;`FALSE`(默认)仅返回建 Stream 后的新变更
28
- - `TIMESTAMP AS OF`:指定 Stream 从哪个时间点开始捕获变更
29
-
30
- **示例:**
31
- ```sql
32
- -- 在普通表上创建标准流(捕获所有变更,需先开启 change_tracking)
33
- ALTER TABLE ods.orders SET PROPERTIES ('change_tracking' = 'true');
34
-
35
- CREATE TABLE STREAM orders_stream
36
- ON TABLE ods.orders
37
- WITH PROPERTIES ('TABLE_STREAM_MODE' = 'STANDARD');
38
-
39
- -- 仅追加流
40
- CREATE TABLE STREAM events_stream
41
- ON TABLE dw.events
42
- COMMENT '事件流,仅追加'
43
- WITH PROPERTIES ('TABLE_STREAM_MODE' = 'APPEND_ONLY');
44
-
45
- -- 从指定时间点开始捕获
46
- CREATE TABLE STREAM orders_stream_from_ts
47
- ON TABLE ods.orders
48
- TIMESTAMP AS OF '2024-01-01 00:00:00'
49
- WITH PROPERTIES ('TABLE_STREAM_MODE' = 'STANDARD', 'SHOW_INITIAL_ROWS' = 'TRUE');
50
- ```
51
-
52
- ## 消费 Table Stream
53
-
54
- Table Stream 的 offset 通过 DML 操作移动。**仅 SELECT 不会移动 offset**,可以反复查询预览。执行 DML(INSERT INTO / MERGE INTO / UPDATE / DELETE)消费数据后,offset 前进。
55
-
56
- ```sql
57
- -- 查看当前未消费的变更数据(不移动 offset)
58
- SELECT * FROM orders_stream;
59
-
60
- -- 变更数据包含的系统字段
61
- -- __change_type: INSERT | UPDATE_BEFORE | UPDATE_AFTER | DELETE
62
- -- __commit_version: 变更版本号
63
- -- __commit_timestamp: 变更发生时间
64
-
65
- -- 典型用法:将变更数据 MERGE 到目标表(过滤掉 UPDATE_BEFORE)
66
- MERGE INTO dw.orders_dim AS target
67
- USING (
68
- SELECT * FROM orders_stream
69
- WHERE __change_type != 'UPDATE_BEFORE'
70
- ) AS src
71
- ON target.order_id = src.order_id
72
- WHEN MATCHED AND src.__change_type = 'UPDATE_AFTER' THEN UPDATE SET target.status = src.status, target.amount = src.amount
73
- WHEN MATCHED AND src.__change_type = 'DELETE' THEN DELETE
74
- WHEN NOT MATCHED AND src.__change_type IN ('INSERT', 'UPDATE_AFTER') THEN INSERT (order_id, status, amount) VALUES (src.order_id, src.status, src.amount);
75
-
76
- -- 配合 Dynamic Table 自动消费(推荐)
77
- CREATE OR REPLACE DYNAMIC TABLE dw.orders_processed
78
- REFRESH INTERVAL 1 MINUTE vcluster default
79
- AS
80
- SELECT order_id, status, amount, __change_type, __commit_timestamp
81
- FROM orders_stream
82
- WHERE __change_type IN ('INSERT', 'UPDATE_AFTER');
83
- ```
84
-
85
- ## DROP TABLE STREAM
86
-
87
- ```sql
88
- DROP TABLE STREAM [ IF EXISTS ] <stream_name>;
89
- ```
90
-
91
- ## SHOW / DESC
92
-
93
- ```sql
94
- -- 列出当前 schema 下所有 Table Stream
95
- SHOW TABLE STREAMS;
96
-
97
- -- 列出指定 schema 下的 Table Stream
98
- SHOW TABLE STREAMS IN <schema_name>;
99
-
100
- -- 按名称过滤
101
- SHOW TABLE STREAMS LIKE 'orders%';
102
-
103
- -- 查看 Table Stream 详情(源表、模式、创建时间)
104
- DESC TABLE STREAM <stream_name>;
105
- ```
106
-
107
- ## 注意事项
108
-
109
- - 仅 SELECT 不会移动 offset,可反复查询预览
110
- - DML 操作(INSERT INTO / MERGE INTO / UPDATE / DELETE)会移动 offset
111
- - ⚠️ 即使 DML 带 WHERE 条件过滤了部分行,**所有行的 offset 都会移动**
112
- - 若长时间不消费,超出源表的 `data_retention_days` 后数据会丢失
113
- - `STANDARD` 模式下 UPDATE 会产生两条记录:`UPDATE_BEFORE`(更新前)和 `UPDATE_AFTER`(更新后)
114
- - 消费时通常过滤 `__change_type != 'UPDATE_BEFORE'`,忽略旧值
115
- - 源表需先开启 `change_tracking`:`ALTER TABLE name SET PROPERTIES ('change_tracking' = 'true')`
116
-
117
- ## 参考文档
118
-
119
- - [CREATE TABLE STREAM](https://www.yunqi.tech/documents/create-table-stream)
120
- - [DESC TABLE STREAM](https://www.yunqi.tech/documents/desc-table-stream)
121
- - [SHOW TABLE STREAMS](https://www.yunqi.tech/documents/show-table-streams)
122
- - [DROP TABLE STREAM](https://www.yunqi.tech/documents/drop-table-stream)
123
- - [TABLE STREAM 简介](https://www.yunqi.tech/documents/tablestream_summary)
124
- - [Table Stream 变化数据捕获](https://www.yunqi.tech/documents/table_stream)
125
- - [Table Stream 最佳实践](https://www.yunqi.tech/documents/lakehouse-table-stream-best-practices)
@@ -1,16 +0,0 @@
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.
@@ -1,249 +0,0 @@
1
- ---
2
- name: clickzetta-sql-syntax-guide
3
- description: |
4
- ClickZetta Lakehouse SQL 语法完整参考,以及从 Snowflake、Databricks、Spark SQL 迁移的
5
- 全面兼容性指南。覆盖 DDL/DML/DQL 完整语法、隐式类型转换规则、迁移陷阱速查。
6
- 帮助从 Snowflake 或 Databricks 迁移的用户快速找到正确语法,避免常见错误。
7
- 当用户说"Snowflake 迁移"、"Databricks 迁移"、"Spark SQL 迁移"、"语法差异"、
8
- "ClickZetta 怎么写"、"TARGET_LAG"、"QUALIFY"、"VARIANT"、"METADATA$ACTION"、
9
- "CREATE OR REPLACE"、"LISTAGG"、"IFF"、"DATEADD"、"FLATTEN"、"PIVOT"、
10
- "SQL 语法参考"、"数据类型"、"DATEDIFF"、"CHARINDEX"、"ZEROIFNULL"、
11
- "OBJECT_CONSTRUCT"、"ARRAY_SIZE"、"APPLY CHANGES INTO"、"ZORDER"、
12
- "WHEN NOT MATCHED BY SOURCE"、"WITH RECURSIVE"、"BEGIN TRANSACTION"、
13
- "隐式转换"、"implicit cast"、"日期写入"、"BOOLEAN 写入"、"UNION"、"INTERSECT"、
14
- "EXCEPT"、"集合运算"、"STRUCT AS"、"named_struct"、"JSON"、"半结构化"、
15
- "大宽表"、"VARIANT"、"JSON 字段"、"灵活 Schema"、"客户案例"时触发。
16
- Keywords: SQL syntax, DDL, DML, DQL, migration, Snowflake, Databricks, Spark SQL, compatibility
17
- ---
18
-
19
- # ClickZetta Lakehouse SQL 语法指南
20
-
21
- ## 参考文档索引
22
-
23
- | 文档 | 内容 |
24
- |---|---|
25
- | [Snowflake 迁移指南](references/migration-snowflake.md) | 对象映射、类型转换、语法差异、函数对照(完整) |
26
- | [Databricks 迁移指南](references/migration-databricks.md) | Delta Lake 差异、APPLY CHANGES、ZORDER 替代方案 |
27
- | [DDL 参考](references/ddl-reference.md) | Schema/Table/View/Index/Time Travel 完整语法 |
28
- | [DML 参考](references/dml-reference.md) | INSERT/UPDATE/DELETE/MERGE/COPY INTO + 类型转换规则 |
29
- | [DQL 参考](references/dql-reference.md) | SELECT/JOIN/窗口函数/CTE/JSON/ARRAY/LATERAL VIEW |
30
- | [函数参考](references/functions-reference.md) | 数值/字符串/日期/条件/聚合/向量函数完整列表 |
31
- | [vs Snowflake](references/vs-snowflake.md) | 差异汇总(含隐式转换规则表) |
32
- | [vs Spark SQL](references/vs-spark.md) | 数据类型映射 + 语法差异汇总 |
33
-
34
- ---
35
-
36
- ## ⚠️ 最常见迁移陷阱(速查)
37
-
38
- | 场景 | Snowflake / Spark | ClickZetta 正确写法 |
39
- |---|---|---|
40
- | 替换普通表 | `CREATE OR REPLACE TABLE t` | `CREATE OR REPLACE TABLE t` ✅ ClickZetta 支持;`CREATE OR REPLACE TABLE IF NOT EXISTS t` ❌ OR REPLACE 与 IF NOT EXISTS 不能同时使用 |
41
- | OR REPLACE + IF NOT EXISTS | `CREATE OR REPLACE TABLE IF NOT EXISTS t` | ❌ 两者不能同时使用,会报错 |
42
- | 动态表刷新 | `TARGET_LAG = '1 hour'` (SF) | `PROPERTIES ('target_lag' = '1 hour', 'warehouse' = 'vc')` |
43
- | Stream 元数据 | `METADATA$ACTION` | `__change_type` |
44
- | 对象存储导入 | `COPY INTO t FROM @stage` | `COPY INTO t FROM VOLUME v USING CSV` |
45
- | 窗口过滤 | `QUALIFY ROW_NUMBER() = 1` | `QUALIFY ROW_NUMBER() = 1` ✅ ClickZetta 也支持! |
46
- | 数组展开 | `LATERAL FLATTEN(input => arr)` (SF) | `LATERAL VIEW EXPLODE(arr)` |
47
- | 半结构化访问 | `data:key` (SF) | `data['key']` |
48
- | 列表聚合 | `LISTAGG(col, ',')` (SF) | `GROUP_CONCAT(col SEPARATOR ',')` |
49
- | 条件函数 | `IFF(cond, a, b)` (SF) | `IF(cond, a, b)` |
50
- | 日期加减 | `DATEADD(day, 7, dt)` (SF) | `DATEADD(day, 7, dt)` ✅ 也支持;或用 `DATE_ADD(dt, 7)` |
51
- | DATEDIFF 顺序 | `DATEDIFF(day, start, end)` (SF) | `DATEDIFF(day, start, end)` ✅ 三参数形式也支持;或 `DATEDIFF(end, start)` 两参数形式(返回天数) |
52
- | 查找子串位置 | `CHARINDEX(sub, s)` (SF) | `INSTR(s, sub)` ← 参数顺序相反! |
53
- | 不区分大小写匹配 | `ILIKE` (SF) | `ILIKE` ✅ ClickZetta 也支持! |
54
- | 差集运算 | `MINUS` (Oracle/DB2) | `MINUS` ✅ ClickZetta 也支持! |
55
- | 递归 CTE | `WITH RECURSIVE` (SF/Databricks) | ❌ 不支持,需用 Python/ZettaPark 替代 |
56
- | **⚠️ 时间戳字符串写入** | `INSERT INTO t VALUES (1, '2026-05-01 10:00:00')` | ❌ **报错**:必须显式转换 `CAST('2026-05-01 10:00:00' AS TIMESTAMP)` 或 `TIMESTAMP '2026-05-01 10:00:00'` |
57
- | 集合运算 | `UNION` / `UNION ALL` / `INTERSECT` / `EXCEPT` | ✅ 全部支持 |
58
- | 事务 | `BEGIN; COMMIT; ROLLBACK;` | ❌ 不支持,用 MERGE 实现原子操作 |
59
- | MERGE 不匹配删除 | `WHEN NOT MATCHED BY SOURCE THEN DELETE` | ❌ 不支持,需两步:MERGE + DELETE |
60
- | Delta ZORDER | `OPTIMIZE t ZORDER BY (col)` | `OPTIMIZE t`(只做小文件合并,无 ZORDER) |
61
- | STRUCT 命名字段 | `STRUCT(1 AS id, 'Alice' AS name)` | `named_struct('id', 1, 'name', 'Alice')` ✅ |
62
- | SEQUENCE 对象 | `CREATE SEQUENCE seq` | ❌ 不支持,用 `IDENTITY(1)` 列替代 |
63
- | IDENTITY 列类型 | `id INT IDENTITY` | `id BIGINT IDENTITY`(IDENTITY 只支持 BIGINT,INT/SMALLINT 会报错) |
64
- | 当前时间函数 | `NOW()` | `NOW()` ✅ ClickZetta 也支持!也可用 `CURRENT_TIMESTAMP()` |
65
- | 布尔类型名称 | `BOOL` | `BOOLEAN`(ClickZetta 不支持 BOOL 简写) |
66
- | 字符串类型 | `VARCHAR(n)` | 推荐用 `STRING`(无长度限制,最大 16MB);`VARCHAR(n)` 也支持但不推荐 |
67
- | 数值类型 | `NUMBER(p,s)` (SF) | `DECIMAL(p,s)` |
68
- | 半结构化类型 | `VARIANT` (SF) | `JSON` |
69
- | 行数限制 | `SELECT TOP 10` (SF) | `SELECT ... LIMIT 10` |
70
- | NULL转0 | `ZEROIFNULL(x)` (SF) | `COALESCE(x, 0)` |
71
- | 0转NULL | `NULLIFZERO(x)` (SF) | `NULLIF(x, 0)` |
72
- | 对象聚合 | `OBJECT_AGG(k, v)` (SF) | `MAP_AGG(k, v)` |
73
- | 数组大小 | `ARRAY_SIZE(arr)` (SF) | `SIZE(arr)` 或 `ARRAY_SIZE(arr)` ✅ 两者均支持 |
74
- | PIVOT | 原生 PIVOT 语法 (SF) | `CASE WHEN` 手动实现 |
75
- | 临时表 | `CREATE TEMPORARY TABLE` (SF) | 不支持,用 CTE 替代 |
76
- | 日期字符串写入 | `INSERT ... VALUES (..., '2024-01-15', ...)` | `CAST('2024-01-15' AS DATE)` 或 `DATE '2024-01-15'` 或 `TO_DATE(...)` |
77
- | 时间字符串写入 | `INSERT ... VALUES (..., '2024-01-15 12:00:00', ...)` | `CAST(... AS TIMESTAMP)` 或 `TIMESTAMP '...'` 或 `TO_TIMESTAMP(...)` |
78
- | BOOLEAN 写入 | `INSERT ... VALUES (..., 'true', ...)` 或 `..., 1, ...` | `TRUE` / `FALSE` 或 `CAST(1 AS BOOLEAN)` |
79
- | JSON 写入 | `INSERT ... VALUES (..., '{"k":1}', ...)` | `PARSE_JSON('{"k":1}')` 或 `CAST(... AS JSON)` |
80
- | 字符串写入数字列 | `INSERT ... VALUES (..., '123', ...)` | `CAST('123' AS INT)` |
81
- | UPDATE 同样限制 | `UPDATE t SET dt = '2024-01-01'` | `UPDATE t SET dt = CAST('2024-01-01' AS DATE)` |
82
- | WHERE 中可以 | 不适用 | `WHERE dt = '2024-01-01'` ✅ WHERE 中字符串可隐式比较 |
83
- | 索引语法关键字 | `USING BLOOM_FILTER` | `BLOOMFILTER`(无 USING);向量/倒排建表内联时用 `USING VECTOR` / `USING INVERTED` |
84
- | DROP INDEX | `DROP INDEX idx ON table` | `DROP INDEX idx`(无 ON table) |
85
- | TRUNCATE IF EXISTS | `TRUNCATE TABLE IF EXISTS t` | ❌ 不支持 `IF EXISTS`,直接用 `TRUNCATE TABLE t`(表不存在会报错) |
86
- | DESC TABLE 扩展 | `DESC TABLE t EXTENDED` / `DESC TABLE t HISTORY` | ❌ 不支持 EXTENDED/HISTORY 参数,用 `DESC TABLE t` 或 `SHOW CREATE TABLE t` |
87
- | TABLESAMPLE | `SELECT * FROM t TABLESAMPLE (50 PERCENT)` | ❌ 不支持 PERCENT 语法,用 `ORDER BY RAND() LIMIT n` 替代 |
88
- | MERGE 多 MATCHED 顺序 | DELETE 可在 UPDATE 前 | UPDATE 必须在 DELETE 之前 |
89
- | 同义词 | `CREATE SYNONYM s FOR t` (Oracle) | `CREATE SYNONYM s FOR TABLE t` ✅ 支持 TABLE/VOLUME/FUNCTION 三种对象 |
90
-
91
- ---
92
-
93
- ## 数据类型速查
94
-
95
- ```sql
96
- -- 数值
97
- TINYINT / SMALLINT / INT / BIGINT
98
- FLOAT / DOUBLE
99
- DECIMAL(p, s) -- 精确数值(Snowflake 用 NUMBER)
100
-
101
- -- 字符串
102
- STRING -- 推荐,无长度限制
103
- VARCHAR(n) -- 最大 65533 字符
104
- CHAR(n) -- 定长,1-255
105
-
106
- -- 时间
107
- DATE -- YYYY-MM-DD
108
- TIMESTAMP -- 带本地时区(≈ Snowflake TIMESTAMP_LTZ)
109
- TIMESTAMP_NTZ -- 无时区(同 Snowflake TIMESTAMP_NTZ)
110
-
111
- -- 布尔 / 二进制
112
- BOOLEAN / BINARY
113
-
114
- -- 半结构化
115
- JSON -- 替代 Snowflake VARIANT
116
- ARRAY<T> -- 需指定元素类型,如 ARRAY<INT>
117
- MAP<K, V> -- 如 MAP<STRING, INT>
118
- STRUCT<f1:T1, f2:T2> -- 结构体
119
-
120
- -- AI 专用
121
- VECTOR(FLOAT, 1024) -- 向量类型(ClickZetta 特有)
122
- ```
123
-
124
- ---
125
-
126
- ## ClickZetta 特有对象(Snowflake/Spark 无对应)
127
-
128
- ```sql
129
- -- 计算集群
130
- CREATE VCLUSTER my_vc VCLUSTER_TYPE = ANALYTICS VCLUSTER_SIZE = 4;
131
- USE VCLUSTER my_vc;
132
-
133
- -- 动态表(增量计算)
134
- CREATE DYNAMIC TABLE sales_daily
135
- REFRESH INTERVAL 5 MINUTE VCLUSTER default_ap
136
- AS SELECT DATE(created_at) AS dt, SUM(amount) AS total FROM orders GROUP BY 1;
137
-
138
- -- Table Stream(CDC)
139
- CREATE TABLE STREAM orders_stream ON TABLE orders
140
- WITH PROPERTIES ('TABLE_STREAM_MODE' = 'STANDARD');
141
- -- 元数据字段:__change_type(INSERT/UPDATE_BEFORE/UPDATE_AFTER/DELETE)
142
-
143
- -- Pipe(持续导入)
144
- CREATE PIPE oss_pipe
145
- AS COPY INTO orders FROM VOLUME my_volume USING CSV OPTIONS('header'='true');
146
-
147
- -- Volume(对象存储)
148
- CREATE EXTERNAL VOLUME my_vol
149
- LOCATION 'oss://bucket/path'
150
- USING CONNECTION my_oss_conn;
151
-
152
- -- Share(跨实例数据共享)
153
- CREATE SHARE my_share;
154
- GRANT SELECT, READ METADATA ON TABLE public.orders TO SHARE my_share;
155
-
156
- -- Synonym(同义词,为对象创建别名)
157
- CREATE SYNONYM my_orders FOR TABLE other_schema.orders;
158
- CREATE SYNONYM my_vol FOR VOLUME other_schema.data_volume;
159
- CREATE SYNONYM my_func FOR FUNCTION other_schema.udf_name;
160
- DROP SYNONYM my_orders FOR TABLE;
161
- SHOW SYNONYMS;
162
-
163
- -- Time Travel
164
- SELECT * FROM orders TIMESTAMP AS OF '2024-01-01 00:00:00';
165
- RESTORE TABLE orders TO TIMESTAMP AS OF '2024-01-01 00:00:00';
166
- UNDROP TABLE orders;
167
-
168
- -- 向量检索
169
- CREATE TABLE docs (id INT, vec VECTOR(FLOAT, 1024),
170
- INDEX vec_idx (vec) USING VECTOR PROPERTIES ("distance.function"="cosine_distance"));
171
- SELECT id, cosine_distance(vec, CAST('[0.1,0.2,...]' AS VECTOR(1024))) AS dist
172
- FROM docs ORDER BY dist LIMIT 10;
173
- ```
174
-
175
- ---
176
-
177
- ## ❌ 明确不支持的功能
178
-
179
- 以下功能在 Snowflake/Databricks/Spark 中存在,但 ClickZetta **不支持**。使用时会报错,需要用替代方案。
180
-
181
- ### 字符串函数
182
-
183
- | 不支持的函数 | 替代方案 |
184
- |---|---|
185
- | `INITCAP(s)` | `CONCAT(UPPER(SUBSTR(s, 1, 1)), LOWER(SUBSTR(s, 2)))` |
186
- | `SOUNDEX(s)` | 无替代方案 |
187
- | `CHARINDEX(sub, s)` | `INSTR(s, sub)`(注意参数顺序相反) |
188
-
189
- ### JSON 函数
190
-
191
- | 不支持的函数 | 替代方案 |
192
- |---|---|
193
- | `JSON_ARRAY_LENGTH(json)` | `SIZE(CAST(json_str AS ARRAY<STRING>))` |
194
- | `JSON_OBJECT_KEYS(json)` | 无直接替代,需手动解析 |
195
-
196
- ### 集合/数组/MAP 函数
197
-
198
- | 不支持的函数 | 替代方案 |
199
- |---|---|
200
- | `MAP_FROM_ZIP(keys, values)` | `MAP_FROM_ARRAYS(keys, values)` |
201
- | `TO_ARRAY(expr)` | `ARRAY(expr)` 或 `CAST(expr AS ARRAY<T>)` |
202
- | `ARRAY_SIZE(arr)` (Snowflake) | `SIZE(arr)` 或 `ARRAY_SIZE(arr)` ✅ 两者均支持 |
203
-
204
- ### 正则函数
205
-
206
- | 不支持的函数 | 替代方案 |
207
- |---|---|
208
- | `REGEXP_SUBSTR(s, pattern)` | `REGEXP_EXTRACT(s, '(pattern)')` |
209
-
210
- ### 表函数/生成器
211
-
212
- | 不支持的函数 | 替代方案 |
213
- |---|---|
214
- | `GENERATE(start, end)` | 无直接替代,用 CTE + UNION ALL 或应用层生成 |
215
- | `RANGE(n)` | 无直接替代 |
216
- | `TABLESAMPLE (n PERCENT)` | `ORDER BY RAND() LIMIT n` |
217
-
218
- ### 地理空间/网络
219
-
220
- | 不支持的函数 | 替代方案 |
221
- |---|---|
222
- | `ST_GeomFromWKT(wkt)` | 不支持地理空间函数 |
223
- | `TO_IPV4(ip_string)` | 不支持 IP 地址函数 |
224
-
225
- ### 近似计算
226
-
227
- | 不支持的函数 | 替代方案 |
228
- |---|---|
229
- | `HLL_APPROX(col)` | `APPROX_COUNT_DISTINCT(col)` |
230
-
231
- ### 位运算
232
-
233
- | 不支持的函数 | 替代方案 |
234
- |---|---|
235
- | `BITAND(a, b)` | `a & b`(位运算符) |
236
- | `BITOR(a, b)` | `a \| b` |
237
- | `BITXOR(a, b)` | `a ^ b` |
238
-
239
- ### DDL/DML 限制
240
-
241
- | 不支持的语法 | 替代方案 |
242
- |---|---|
243
- | `TRUNCATE TABLE IF EXISTS t` | 先检查表是否存在,再 `TRUNCATE TABLE t` |
244
- | `DESC TABLE t EXTENDED` | `DESC TABLE t` 或 `SHOW CREATE TABLE t` |
245
- | `DESC TABLE t HISTORY` | `SHOW TABLES HISTORY WHERE table_name = 't'` |
246
- | `CREATE TEMPORARY TABLE` | 用 CTE 替代,或创建普通表后手动删除 |
247
- | `CREATE OR REPLACE TABLE` | `CREATE OR REPLACE TABLE t (...)` ✅ 直接支持 |
248
- | `BEGIN; COMMIT; ROLLBACK;` | 不支持事务,用 MERGE 实现原子操作 |
249
- | `WITH RECURSIVE` | 不支持递归 CTE,用 Python/ZettaPark 替代 |
@@ -1,3 +0,0 @@
1
- {"case_id":"001","type":"should_call","user_input":"Snowflake 的 IFF、ARRAY_SIZE、LISTAGG 在 ClickZetta 怎么写?","expected_skill":"clickzetta-sql-syntax-guide","expected_output_contains":["IF(","SIZE("]}
2
- {"case_id":"002","type":"should_call","user_input":"Databricks 的 APPLY CHANGES INTO 在 ClickZetta 怎么替代?","expected_skill":"clickzetta-sql-syntax-guide","expected_output_contains":["MERGE INTO"]}
3
- {"case_id":"003","type":"should_call","user_input":"ClickZetta 的隐式类型转换规则是什么?","expected_skill":"clickzetta-sql-syntax-guide","expected_output_contains":["隐式","转换"]}