@clickzetta/cz-cli-linux-x64 0.3.4 → 0.3.5
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.
- package/bin/cz-cli +0 -0
- package/package.json +1 -1
- package/bin/skills/clickzetta-access-control/SKILL.md +0 -243
- package/bin/skills/clickzetta-access-control/references/dynamic-masking.md +0 -86
- package/bin/skills/clickzetta-access-control/references/grant-revoke.md +0 -103
- package/bin/skills/clickzetta-access-control/references/role-management.md +0 -66
- package/bin/skills/clickzetta-access-control/references/user-management.md +0 -61
- package/bin/skills/clickzetta-ai-vector-search/SKILL.md +0 -160
- package/bin/skills/clickzetta-ai-vector-search/references/vector-search.md +0 -155
- package/bin/skills/clickzetta-app-python-sdk/SKILL.md +0 -153
- package/bin/skills/clickzetta-app-python-sdk/references/bulkload.md +0 -196
- package/bin/skills/clickzetta-app-python-sdk/references/connector.md +0 -143
- package/bin/skills/clickzetta-app-python-sdk/references/realtime.md +0 -122
- package/bin/skills/clickzetta-batch-sync-pipeline/SKILL.md +0 -293
- package/bin/skills/clickzetta-bi-connect/SKILL.md +0 -176
- package/bin/skills/clickzetta-bi-connect/references/bi-tools.md +0 -170
- package/bin/skills/clickzetta-cdc-sync-pipeline/SKILL.md +0 -457
- package/bin/skills/clickzetta-concepts/SKILL.md +0 -282
- package/bin/skills/clickzetta-concepts/references/brands-and-endpoints.md +0 -79
- package/bin/skills/clickzetta-concepts/references/object-model.md +0 -311
- package/bin/skills/clickzetta-data-ingest-pipeline/SKILL.md +0 -165
- package/bin/skills/clickzetta-data-lifecycle/SKILL.md +0 -211
- package/bin/skills/clickzetta-data-lifecycle/references/lifecycle-reference.md +0 -175
- package/bin/skills/clickzetta-data-recovery/SKILL.md +0 -215
- package/bin/skills/clickzetta-data-recovery/evals/evals.json +0 -35
- package/bin/skills/clickzetta-data-science/SKILL.md +0 -125
- package/bin/skills/clickzetta-data-science/references/bitmap-profile.md +0 -146
- package/bin/skills/clickzetta-data-science/references/data-patterns.md +0 -110
- package/bin/skills/clickzetta-data-science/references/setup.md +0 -160
- package/bin/skills/clickzetta-data-science/references/stats-functions.md +0 -195
- package/bin/skills/clickzetta-data-science/references/write-and-infer.md +0 -122
- package/bin/skills/clickzetta-data-science/references/zettapark-api.md +0 -156
- package/bin/skills/clickzetta-data-sharing/SKILL.md +0 -160
- package/bin/skills/clickzetta-data-sharing/references/share-ddl.md +0 -134
- package/bin/skills/clickzetta-dba-guide/SKILL.md +0 -540
- package/bin/skills/clickzetta-dw-modeling/SKILL.md +0 -259
- package/bin/skills/clickzetta-dw-modeling/references/modeling-patterns.md +0 -100
- package/bin/skills/clickzetta-dynamic-table/SKILL.md +0 -112
- package/bin/skills/clickzetta-dynamic-table/best-practices/dimension-table-join-guide.md +0 -257
- package/bin/skills/clickzetta-dynamic-table/best-practices/medallion-and-stream-patterns.md +0 -124
- package/bin/skills/clickzetta-dynamic-table/best-practices/non-partitioned-merge-into-warning.md +0 -96
- package/bin/skills/clickzetta-dynamic-table/best-practices/performance-optimization.md +0 -109
- package/bin/skills/clickzetta-dynamic-table/dt-creator/SKILL.md +0 -15
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/dt-declaration-strategy.md +0 -185
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/incremental-config-reference.md +0 -429
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/refresh-history-guide.md +0 -268
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/sql-limitations.md +0 -80
- package/bin/skills/clickzetta-dynamic-table/dynamic-table-alter/SKILL.md +0 -190
- package/bin/skills/clickzetta-external-catalog/SKILL.md +0 -120
- package/bin/skills/clickzetta-external-catalog/references/external-catalog-ddl.md +0 -130
- package/bin/skills/clickzetta-external-function/SKILL.md +0 -203
- package/bin/skills/clickzetta-external-function/references/external-function-ddl.md +0 -171
- package/bin/skills/clickzetta-file-import-pipeline/SKILL.md +0 -156
- package/bin/skills/clickzetta-index-manager/SKILL.md +0 -140
- package/bin/skills/clickzetta-index-manager/references/bloomfilter-index.md +0 -67
- package/bin/skills/clickzetta-index-manager/references/index-management.md +0 -73
- package/bin/skills/clickzetta-index-manager/references/inverted-index.md +0 -80
- package/bin/skills/clickzetta-index-manager/references/vector-index.md +0 -81
- package/bin/skills/clickzetta-information-schema/SKILL.md +0 -367
- package/bin/skills/clickzetta-information-schema/references/instance-views-reference.md +0 -276
- package/bin/skills/clickzetta-information-schema/references/metering-views-reference.md +0 -137
- package/bin/skills/clickzetta-information-schema/references/views-reference.md +0 -271
- package/bin/skills/clickzetta-java-sdk/SKILL.md +0 -186
- package/bin/skills/clickzetta-java-sdk/references/bulkload.md +0 -163
- package/bin/skills/clickzetta-java-sdk/references/realtime.md +0 -212
- package/bin/skills/clickzetta-kafka-ingest-pipeline/SKILL.md +0 -639
- package/bin/skills/clickzetta-kafka-ingest-pipeline/references/kafka-pipe-syntax.md +0 -324
- package/bin/skills/clickzetta-lakehouse-connect/SKILL.md +0 -218
- package/bin/skills/clickzetta-lakehouse-connect/evals/evals.json +0 -35
- package/bin/skills/clickzetta-lakehouse-connect/references/config-file.md +0 -435
- package/bin/skills/clickzetta-lakehouse-connect/references/jdbc.md +0 -478
- package/bin/skills/clickzetta-lakehouse-connect/references/python-sdk.md +0 -225
- package/bin/skills/clickzetta-lakehouse-connect/references/sqlalchemy.md +0 -468
- package/bin/skills/clickzetta-lakehouse-connect/references/zettapark-session.md +0 -445
- package/bin/skills/clickzetta-manage-comments/SKILL.md +0 -219
- package/bin/skills/clickzetta-metadata-query/SKILL.md +0 -298
- package/bin/skills/clickzetta-metadata-query/references/show-desc-reference.md +0 -326
- package/bin/skills/clickzetta-monitoring/SKILL.md +0 -199
- package/bin/skills/clickzetta-monitoring/references/job-history-analysis.md +0 -97
- package/bin/skills/clickzetta-monitoring/references/show-jobs.md +0 -48
- package/bin/skills/clickzetta-oss-ingest-pipeline/SKILL.md +0 -427
- package/bin/skills/clickzetta-query-optimizer/SKILL.md +0 -156
- package/bin/skills/clickzetta-query-optimizer/references/explain.md +0 -56
- package/bin/skills/clickzetta-query-optimizer/references/hints-and-sortkey.md +0 -78
- package/bin/skills/clickzetta-query-optimizer/references/optimize.md +0 -65
- package/bin/skills/clickzetta-query-optimizer/references/result-cache.md +0 -49
- package/bin/skills/clickzetta-query-optimizer/references/show-jobs.md +0 -42
- package/bin/skills/clickzetta-realtime-sync-pipeline/SKILL.md +0 -197
- package/bin/skills/clickzetta-semantic-view/SKILL.md +0 -207
- package/bin/skills/clickzetta-semantic-view/references/semantic-view-reference.md +0 -167
- package/bin/skills/clickzetta-spark-flink-connector/SKILL.md +0 -92
- package/bin/skills/clickzetta-spark-flink-connector/references/flink.md +0 -147
- package/bin/skills/clickzetta-spark-flink-connector/references/spark.md +0 -132
- package/bin/skills/clickzetta-sql-pipeline-manager/SKILL.md +0 -379
- package/bin/skills/clickzetta-sql-pipeline-manager/evals/evals.json +0 -166
- package/bin/skills/clickzetta-sql-pipeline-manager/references/dynamic-table.md +0 -185
- package/bin/skills/clickzetta-sql-pipeline-manager/references/materialized-view.md +0 -129
- package/bin/skills/clickzetta-sql-pipeline-manager/references/pipe.md +0 -222
- package/bin/skills/clickzetta-sql-pipeline-manager/references/table-stream.md +0 -125
- package/bin/skills/clickzetta-sql-syntax-guide/SKILL.md +0 -172
- package/bin/skills/clickzetta-sql-syntax-guide/references/ddl-reference.md +0 -350
- package/bin/skills/clickzetta-sql-syntax-guide/references/dml-reference.md +0 -279
- package/bin/skills/clickzetta-sql-syntax-guide/references/dql-reference.md +0 -504
- package/bin/skills/clickzetta-sql-syntax-guide/references/functions-reference.md +0 -372
- package/bin/skills/clickzetta-sql-syntax-guide/references/migration-databricks.md +0 -260
- package/bin/skills/clickzetta-sql-syntax-guide/references/migration-snowflake.md +0 -382
- package/bin/skills/clickzetta-sql-syntax-guide/references/vs-snowflake.md +0 -346
- package/bin/skills/clickzetta-sql-syntax-guide/references/vs-spark.md +0 -229
- package/bin/skills/clickzetta-studio-overview/SKILL.md +0 -170
- package/bin/skills/clickzetta-studio-overview/references/studio-modules.md +0 -173
- package/bin/skills/clickzetta-table-stream-pipeline/SKILL.md +0 -206
- package/bin/skills/clickzetta-vcluster-manager/SKILL.md +0 -212
- package/bin/skills/clickzetta-vcluster-manager/references/vc-cache.md +0 -54
- package/bin/skills/clickzetta-vcluster-manager/references/vcluster-ddl.md +0 -150
- package/bin/skills/clickzetta-volume-manager/SKILL.md +0 -292
- package/bin/skills/clickzetta-volume-manager/references/volume-ddl.md +0 -199
- package/bin/skills/clickzetta-zettapark/SKILL.md +0 -248
- package/bin/skills/clickzetta-zettapark/references/zettapark-api.md +0 -283
|
@@ -1,504 +0,0 @@
|
|
|
1
|
-
# DQL 完整语法参考
|
|
2
|
-
|
|
3
|
-
> 基于 ClickZetta Lakehouse 产品文档整理,含与 Snowflake / Spark SQL 的差异标注
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## SELECT 基本语法
|
|
8
|
-
|
|
9
|
-
```sql
|
|
10
|
-
[WITH cte_name AS (SELECT ...) [, ...]]
|
|
11
|
-
SELECT
|
|
12
|
-
[/*+ HINTS */]
|
|
13
|
-
[ALL | DISTINCT]
|
|
14
|
-
select_expr [, ...]
|
|
15
|
-
[EXCEPT (col1, col2, ...)]
|
|
16
|
-
FROM table_reference
|
|
17
|
-
[WHERE condition]
|
|
18
|
-
[GROUP BY [GROUPING SETS | ROLLUP | CUBE] {col | expr | position}]
|
|
19
|
-
[HAVING condition]
|
|
20
|
-
[ORDER BY col [ASC | DESC] [NULLS FIRST | NULLS LAST] [, ...]]
|
|
21
|
-
[LIMIT n [OFFSET m]]
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## SELECT 扩展
|
|
27
|
-
|
|
28
|
-
### EXCEPT(排除列)
|
|
29
|
-
|
|
30
|
-
```sql
|
|
31
|
-
-- 排除指定列(ClickZetta 特有,Snowflake/Spark 也支持)
|
|
32
|
-
SELECT * EXCEPT(password, secret_key) FROM users;
|
|
33
|
-
SELECT * EXCEPT(meta, tags) FROM orders;
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### DISTINCT
|
|
37
|
-
|
|
38
|
-
```sql
|
|
39
|
-
SELECT DISTINCT customer_id FROM orders;
|
|
40
|
-
SELECT ALL customer_id FROM orders; -- 默认,保留重复
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### LIMIT / OFFSET
|
|
44
|
-
|
|
45
|
-
```sql
|
|
46
|
-
SELECT * FROM orders LIMIT 100;
|
|
47
|
-
SELECT * FROM orders LIMIT 100 OFFSET 200; -- 跳过前200行
|
|
48
|
-
|
|
49
|
-
-- ⚠️ ClickZetta 不支持 Snowflake 的 TOP N 语法
|
|
50
|
-
-- Snowflake: SELECT TOP 10 * FROM orders;
|
|
51
|
-
-- ClickZetta: SELECT * FROM orders LIMIT 10;
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
## FROM 子句
|
|
57
|
-
|
|
58
|
-
### JOIN
|
|
59
|
-
|
|
60
|
-
```sql
|
|
61
|
-
-- INNER JOIN
|
|
62
|
-
SELECT o.id, c.name FROM orders o
|
|
63
|
-
INNER JOIN customers c ON o.customer_id = c.id;
|
|
64
|
-
|
|
65
|
-
-- LEFT / RIGHT / FULL OUTER JOIN
|
|
66
|
-
SELECT o.id, c.name FROM orders o
|
|
67
|
-
LEFT JOIN customers c ON o.customer_id = c.id;
|
|
68
|
-
|
|
69
|
-
-- CROSS JOIN
|
|
70
|
-
SELECT * FROM a CROSS JOIN b;
|
|
71
|
-
|
|
72
|
-
-- SELF JOIN
|
|
73
|
-
SELECT a.id, b.id FROM orders a JOIN orders b ON a.customer_id = b.customer_id;
|
|
74
|
-
|
|
75
|
-
-- USING 语法
|
|
76
|
-
SELECT * FROM orders JOIN customers USING (customer_id);
|
|
77
|
-
|
|
78
|
-
-- NATURAL JOIN
|
|
79
|
-
SELECT * FROM orders NATURAL JOIN customers;
|
|
80
|
-
|
|
81
|
-
-- SEMI JOIN(用 EXISTS 或 IN 实现)
|
|
82
|
-
SELECT * FROM orders WHERE EXISTS (
|
|
83
|
-
SELECT 1 FROM customers WHERE customers.id = orders.customer_id
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
-- ANTI JOIN(用 NOT EXISTS 或 NOT IN 实现)
|
|
87
|
-
SELECT * FROM orders WHERE NOT EXISTS (
|
|
88
|
-
SELECT 1 FROM customers WHERE customers.id = orders.customer_id
|
|
89
|
-
);
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
**与 Snowflake 差异:**
|
|
93
|
-
- Snowflake 支持 `ASOF JOIN`(时序连接);ClickZetta 不支持
|
|
94
|
-
- Snowflake 支持 `MATCH_RECOGNIZE`;ClickZetta 不支持
|
|
95
|
-
|
|
96
|
-
### LATERAL VIEW(展开数组/MAP)
|
|
97
|
-
|
|
98
|
-
```sql
|
|
99
|
-
-- EXPLODE 展开数组
|
|
100
|
-
SELECT e.id, s.skill
|
|
101
|
-
FROM employees e
|
|
102
|
-
LATERAL VIEW EXPLODE(e.skills) s AS skill;
|
|
103
|
-
|
|
104
|
-
-- POSEXPLODE 带位置索引
|
|
105
|
-
SELECT e.id, ps.pos, ps.skill
|
|
106
|
-
FROM employees e
|
|
107
|
-
LATERAL VIEW POSEXPLODE(e.skills) ps AS pos, skill;
|
|
108
|
-
|
|
109
|
-
-- OUTER(空数组也保留行)
|
|
110
|
-
SELECT e.id, s.skill
|
|
111
|
-
FROM employees e
|
|
112
|
-
LATERAL VIEW OUTER EXPLODE(e.skills) s AS skill;
|
|
113
|
-
|
|
114
|
-
-- 展开 MAP
|
|
115
|
-
SELECT id, k, v
|
|
116
|
-
FROM t
|
|
117
|
-
LATERAL VIEW EXPLODE(meta_map) m AS k, v;
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
**与 Snowflake 差异:**
|
|
121
|
-
- Snowflake 用 `LATERAL FLATTEN(input => arr)`;ClickZetta 用 `LATERAL VIEW EXPLODE(arr)`
|
|
122
|
-
- Snowflake `f.value::STRING`;ClickZetta 直接用列别名
|
|
123
|
-
|
|
124
|
-
**与 Spark SQL 差异:**
|
|
125
|
-
- 语法完全相同(ClickZetta 兼容 Hive/Spark 风格)
|
|
126
|
-
|
|
127
|
-
### TABLESAMPLE
|
|
128
|
-
|
|
129
|
-
```sql
|
|
130
|
-
-- SYSTEM 模式:按百分比采样(文件级)
|
|
131
|
-
SELECT * FROM orders TABLESAMPLE (10 PERCENT);
|
|
132
|
-
|
|
133
|
-
-- ROW 模式:按行数采样
|
|
134
|
-
SELECT * FROM orders TABLESAMPLE (100 ROWS);
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### SEQUENCE(生成序列)
|
|
138
|
-
|
|
139
|
-
```sql
|
|
140
|
-
-- 生成整数序列(返回 ARRAY)
|
|
141
|
-
SELECT SEQUENCE(1, 5); -- [1,2,3,4,5]
|
|
142
|
-
SELECT SEQUENCE(0, 10, 2); -- [0,2,4,6,8,10]
|
|
143
|
-
|
|
144
|
-
-- 展开为行(ClickZetta 用 EXPLODE(SEQUENCE(...)),无 GENERATE_SERIES)
|
|
145
|
-
SELECT EXPLODE(SEQUENCE(1, 5)) AS n; -- 5行:1,2,3,4,5
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### EXPLODE 直接在 SELECT 中使用
|
|
149
|
-
|
|
150
|
-
```sql
|
|
151
|
-
-- Spark 风格:EXPLODE 直接在 SELECT 中
|
|
152
|
-
SELECT EXPLODE(ARRAY(1, 2, 3)) AS val;
|
|
153
|
-
SELECT POSEXPLODE(ARRAY('a', 'b', 'c')) AS (pos, val);
|
|
154
|
-
|
|
155
|
-
-- 等价的 LATERAL VIEW 写法
|
|
156
|
-
SELECT val FROM (SELECT ARRAY(1,2,3) AS arr) t
|
|
157
|
-
LATERAL VIEW EXPLODE(arr) lv AS val;
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
## WHERE 子句
|
|
163
|
-
|
|
164
|
-
```sql
|
|
165
|
-
-- 基本条件
|
|
166
|
-
WHERE amount > 100 AND status = 'completed'
|
|
167
|
-
WHERE status IN ('pending', 'processing')
|
|
168
|
-
WHERE status NOT IN ('cancelled', 'refunded')
|
|
169
|
-
WHERE amount BETWEEN 100 AND 1000
|
|
170
|
-
WHERE name LIKE '%Alice%'
|
|
171
|
-
WHERE name NOT LIKE '%test%'
|
|
172
|
-
WHERE tags IS NULL
|
|
173
|
-
WHERE tags IS NOT NULL
|
|
174
|
-
|
|
175
|
-
-- 正则匹配
|
|
176
|
-
WHERE name RLIKE '^[A-Z].*'
|
|
177
|
-
WHERE name REGEXP '^[A-Z].*' -- 同 RLIKE
|
|
178
|
-
|
|
179
|
-
-- 子查询
|
|
180
|
-
WHERE customer_id IN (SELECT id FROM customers WHERE tier = 'VIP')
|
|
181
|
-
WHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id)
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
**与 Snowflake 差异:**
|
|
185
|
-
- Snowflake `ILIKE`(不区分大小写 LIKE)→ ClickZetta `ILIKE` ✅ 同样支持
|
|
186
|
-
- Snowflake `RLIKE` → ClickZetta 同样支持 `RLIKE` / `REGEXP`
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## GROUP BY 扩展
|
|
191
|
-
|
|
192
|
-
```sql
|
|
193
|
-
-- 基本分组
|
|
194
|
-
SELECT region, SUM(amount) FROM orders GROUP BY region;
|
|
195
|
-
SELECT region, SUM(amount) FROM orders GROUP BY 1; -- 按位置
|
|
196
|
-
|
|
197
|
-
-- GROUP BY ALL(自动推断所有非聚合列)
|
|
198
|
-
SELECT year, month, region, SUM(amount) FROM orders GROUP BY ALL;
|
|
199
|
-
|
|
200
|
-
-- GROUPING SETS(多维分组)
|
|
201
|
-
SELECT region, product, SUM(sales)
|
|
202
|
-
FROM orders
|
|
203
|
-
GROUP BY GROUPING SETS ((region, product), (region), (product), ());
|
|
204
|
-
|
|
205
|
-
-- ROLLUP(层级汇总)
|
|
206
|
-
SELECT region, city, SUM(amount)
|
|
207
|
-
FROM orders
|
|
208
|
-
GROUP BY ROLLUP (region, city);
|
|
209
|
-
-- 等价于 GROUPING SETS ((region, city), (region), ())
|
|
210
|
-
|
|
211
|
-
-- CUBE(全组合汇总)
|
|
212
|
-
SELECT region, product, channel, SUM(amount)
|
|
213
|
-
FROM orders
|
|
214
|
-
GROUP BY CUBE (region, product, channel);
|
|
215
|
-
|
|
216
|
-
-- HAVING
|
|
217
|
-
SELECT customer_id, SUM(amount) AS total
|
|
218
|
-
FROM orders
|
|
219
|
-
GROUP BY customer_id
|
|
220
|
-
HAVING total > 10000;
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
**与 Snowflake 差异:**
|
|
224
|
-
- `GROUP BY ALL` 两者都支持
|
|
225
|
-
- `GROUPING SETS / ROLLUP / CUBE` 两者都支持
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
|
|
229
|
-
## ORDER BY
|
|
230
|
-
|
|
231
|
-
```sql
|
|
232
|
-
SELECT * FROM orders ORDER BY amount DESC;
|
|
233
|
-
SELECT * FROM orders ORDER BY amount DESC NULLS LAST;
|
|
234
|
-
SELECT * FROM orders ORDER BY amount ASC NULLS FIRST;
|
|
235
|
-
SELECT * FROM orders ORDER BY 1 DESC, 2 ASC; -- 按位置
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
## CTE(公用表表达式)
|
|
241
|
-
|
|
242
|
-
```sql
|
|
243
|
-
-- 基本 CTE
|
|
244
|
-
WITH
|
|
245
|
-
monthly AS (
|
|
246
|
-
SELECT DATE_TRUNC('month', created_at) AS month, SUM(amount) AS total
|
|
247
|
-
FROM orders GROUP BY 1
|
|
248
|
-
),
|
|
249
|
-
ranked AS (
|
|
250
|
-
SELECT *, RANK() OVER (ORDER BY total DESC) AS rnk FROM monthly
|
|
251
|
-
)
|
|
252
|
-
SELECT * FROM ranked WHERE rnk <= 5;
|
|
253
|
-
|
|
254
|
-
-- ⚠️ 递归 CTE(ClickZetta 不支持)
|
|
255
|
-
-- Snowflake/Databricks/Spark SQL 支持:
|
|
256
|
-
WITH RECURSIVE org_tree AS (
|
|
257
|
-
SELECT id, name, parent_id, 0 AS level
|
|
258
|
-
FROM employees WHERE parent_id IS NULL
|
|
259
|
-
UNION ALL
|
|
260
|
-
SELECT e.id, e.name, e.parent_id, t.level + 1
|
|
261
|
-
FROM employees e JOIN org_tree t ON e.parent_id = t.id
|
|
262
|
-
)
|
|
263
|
-
SELECT * FROM org_tree ORDER BY level, id;
|
|
264
|
-
|
|
265
|
-
-- ClickZetta 替代方案:用 Python/ZettaPark 迭代实现
|
|
266
|
-
-- 或用多层 CTE 模拟有限深度的递归
|
|
267
|
-
WITH
|
|
268
|
-
level0 AS (SELECT id, name, parent_id, 0 AS level FROM employees WHERE parent_id IS NULL),
|
|
269
|
-
level1 AS (SELECT e.id, e.name, e.parent_id, 1 AS level FROM employees e JOIN level0 t ON e.parent_id = t.id),
|
|
270
|
-
level2 AS (SELECT e.id, e.name, e.parent_id, 2 AS level FROM employees e JOIN level1 t ON e.parent_id = t.id)
|
|
271
|
-
SELECT * FROM level0 UNION ALL SELECT * FROM level1 UNION ALL SELECT * FROM level2;
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
**与 Snowflake 差异:**
|
|
275
|
-
- Snowflake 支持 `WITH RECURSIVE`;ClickZetta ❌ 不支持递归 CTE
|
|
276
|
-
- ClickZetta 仅支持非递归 CTE(普通 WITH 子句)
|
|
277
|
-
- 递归场景需用 Python/ZettaPark 迭代实现,或用多层 CTE 模拟有限深度
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
## 窗口函数
|
|
282
|
-
|
|
283
|
-
```sql
|
|
284
|
-
-- 基本语法
|
|
285
|
-
function_name() OVER (
|
|
286
|
-
[PARTITION BY col1, col2]
|
|
287
|
-
[ORDER BY col3 [ASC|DESC]]
|
|
288
|
-
[ROWS|RANGE BETWEEN start AND end]
|
|
289
|
-
)
|
|
290
|
-
|
|
291
|
-
-- 排名函数
|
|
292
|
-
ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC)
|
|
293
|
-
RANK() OVER (ORDER BY score DESC)
|
|
294
|
-
DENSE_RANK() OVER (ORDER BY score DESC)
|
|
295
|
-
NTILE(4) OVER (ORDER BY amount)
|
|
296
|
-
PERCENT_RANK() OVER (ORDER BY amount)
|
|
297
|
-
CUME_DIST() OVER (ORDER BY amount)
|
|
298
|
-
|
|
299
|
-
-- 聚合窗口
|
|
300
|
-
SUM(amount) OVER (PARTITION BY customer_id)
|
|
301
|
-
AVG(amount) OVER (PARTITION BY dept ORDER BY date
|
|
302
|
-
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
|
|
303
|
-
COUNT(*) OVER (PARTITION BY region)
|
|
304
|
-
MAX(amount) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
|
|
305
|
-
|
|
306
|
-
-- 分析函数
|
|
307
|
-
LAG(amount, 1, 0) OVER (ORDER BY date) -- 前1行,默认0
|
|
308
|
-
LEAD(amount, 1) OVER (ORDER BY date) -- 后1行
|
|
309
|
-
FIRST_VALUE(amount) OVER (ORDER BY date)
|
|
310
|
-
LAST_VALUE(amount) OVER (ORDER BY date
|
|
311
|
-
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
|
|
312
|
-
NTH_VALUE(amount, 3) OVER (ORDER BY date)
|
|
313
|
-
|
|
314
|
-
-- Window Frame
|
|
315
|
-
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- 从头到当前行
|
|
316
|
-
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING -- 前后3行
|
|
317
|
-
RANGE BETWEEN INTERVAL 7 DAY PRECEDING AND CURRENT ROW -- 7天内
|
|
318
|
-
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING -- 当前行到末尾
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
**与 Snowflake 差异:**
|
|
322
|
-
- ClickZetta 同样支持 `QUALIFY` 直接过滤窗口函数结果:
|
|
323
|
-
```sql
|
|
324
|
-
-- 两者都支持
|
|
325
|
-
SELECT * FROM orders QUALIFY ROW_NUMBER() OVER (PARTITION BY cust ORDER BY dt DESC) = 1;
|
|
326
|
-
-- 子查询写法也可以
|
|
327
|
-
SELECT * FROM (
|
|
328
|
-
SELECT *, ROW_NUMBER() OVER (PARTITION BY cust ORDER BY dt DESC) AS rn FROM orders
|
|
329
|
-
) t WHERE rn = 1;
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
---
|
|
333
|
-
|
|
334
|
-
## 子查询
|
|
335
|
-
|
|
336
|
-
```sql
|
|
337
|
-
-- 标量子查询
|
|
338
|
-
SELECT id, (SELECT MAX(amount) FROM orders) AS max_amount FROM orders;
|
|
339
|
-
|
|
340
|
-
-- IN 子查询
|
|
341
|
-
SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE tier = 'VIP');
|
|
342
|
-
|
|
343
|
-
-- EXISTS 子查询
|
|
344
|
-
SELECT * FROM customers c
|
|
345
|
-
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);
|
|
346
|
-
|
|
347
|
-
-- 相关子查询
|
|
348
|
-
SELECT * FROM orders o
|
|
349
|
-
WHERE amount > (SELECT AVG(amount) FROM orders WHERE customer_id = o.customer_id);
|
|
350
|
-
|
|
351
|
-
-- FROM 子查询(派生表)
|
|
352
|
-
SELECT t.region, t.total FROM (
|
|
353
|
-
SELECT region, SUM(amount) AS total FROM orders GROUP BY region
|
|
354
|
-
) t WHERE t.total > 100000;
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
---
|
|
358
|
-
|
|
359
|
-
## JSON 查询
|
|
360
|
-
|
|
361
|
-
```sql
|
|
362
|
-
-- 访问 JSON 字段(用 [] 而非 Snowflake 的 :)
|
|
363
|
-
SELECT data['address']['city'] AS city FROM users;
|
|
364
|
-
SELECT data['phoneNumbers'][0]['number'] AS phone FROM users;
|
|
365
|
-
SELECT data['scores'][2] AS third_score FROM users;
|
|
366
|
-
|
|
367
|
-
-- 构建 JSON
|
|
368
|
-
SELECT PARSE_JSON('{"name":"Alice","age":30}') AS info;
|
|
369
|
-
SELECT TO_JSON(STRUCT(name, age)) AS json_str FROM users;
|
|
370
|
-
|
|
371
|
-
-- 类型转换
|
|
372
|
-
SELECT CAST(data['age'] AS INT) AS age FROM users;
|
|
373
|
-
SELECT data['amount']::DOUBLE AS amount FROM orders; -- :: 语法也支持
|
|
374
|
-
|
|
375
|
-
-- JSON 聚合
|
|
376
|
-
SELECT customer_id, TO_JSON(COLLECT_LIST(STRUCT(id, amount))) AS orders_json
|
|
377
|
-
FROM orders GROUP BY customer_id;
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
**与 Snowflake 差异:**
|
|
381
|
-
- Snowflake `data:key` 冒号语法 → ClickZetta `data['key']` 方括号语法
|
|
382
|
-
- Snowflake `data:key::STRING` → ClickZetta `CAST(data['key'] AS STRING)` 或 `data['key']::STRING`
|
|
383
|
-
- Snowflake `OBJECT_CONSTRUCT(k, v)` → ClickZetta `MAP_AGG(k, v)` 或 `STRUCT(...)` + `TO_JSON`
|
|
384
|
-
- Snowflake `PARSE_JSON` → ClickZetta 相同
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## STRUCT / ARRAY / MAP 操作
|
|
389
|
-
|
|
390
|
-
```sql
|
|
391
|
-
-- 构建 STRUCT
|
|
392
|
-
SELECT STRUCT(name, age, email) AS user_info FROM users; -- ✅ 支持(无字段名,默认 col1, col2...)
|
|
393
|
-
SELECT named_struct('name', name, 'age', age, 'email', email) AS user_info FROM users; -- ✅ 支持(有字段名)
|
|
394
|
-
-- ⚠️ SELECT STRUCT(name AS n, age AS a) 不支持 AS 语法(Snowflake/Spark 支持)
|
|
395
|
-
|
|
396
|
-
-- 构建 ARRAY / MAP
|
|
397
|
-
SELECT ARRAY(1, 2, 3) AS nums;
|
|
398
|
-
SELECT MAP('k1', 1, 'k2', 2) AS m;
|
|
399
|
-
|
|
400
|
-
-- 访问
|
|
401
|
-
SELECT address.city FROM users; -- STRUCT 字段
|
|
402
|
-
SELECT skills[0] FROM employees; -- ARRAY 索引(0-based)
|
|
403
|
-
SELECT meta_map['key'] FROM t; -- MAP 访问
|
|
404
|
-
|
|
405
|
-
-- 数组函数
|
|
406
|
-
SELECT SIZE(skills) AS cnt FROM employees;
|
|
407
|
-
SELECT ARRAY_CONTAINS(skills, 'Python') FROM employees;
|
|
408
|
-
SELECT ARRAY_AGG(order_id) FROM orders GROUP BY customer_id;
|
|
409
|
-
SELECT COLLECT_LIST(order_id) FROM orders GROUP BY customer_id; -- 同 ARRAY_AGG
|
|
410
|
-
SELECT COLLECT_SET(status) FROM orders GROUP BY customer_id; -- 去重
|
|
411
|
-
SELECT SORT_ARRAY(skills) FROM employees;
|
|
412
|
-
SELECT ARRAY_DISTINCT(tags) FROM articles;
|
|
413
|
-
SELECT ARRAY_UNION(a, b) FROM t;
|
|
414
|
-
SELECT ARRAY_INTERSECT(a, b) FROM t;
|
|
415
|
-
SELECT ARRAY_EXCEPT(a, b) FROM t;
|
|
416
|
-
SELECT FLATTEN(nested_array) FROM t; -- 展平嵌套数组
|
|
417
|
-
|
|
418
|
-
-- 高阶函数
|
|
419
|
-
SELECT TRANSFORM(skills, x -> UPPER(x)) FROM employees;
|
|
420
|
-
SELECT FILTER(scores, x -> x > 90) FROM students;
|
|
421
|
-
-- ⚠️ AGGREGATE(arr, init, (acc,x)->...) 不支持,用 ARRAY_AGG + SUM 替代
|
|
422
|
-
-- ⚠️ REDUCE(arr, init, (acc,x)->...) 不支持(Spark 名称)
|
|
423
|
-
SELECT EXISTS(scores, x -> x > 100) FROM students;
|
|
424
|
-
SELECT FORALL(scores, x -> x >= 0) FROM students;
|
|
425
|
-
SELECT ZIP_WITH(a, b, (x, y) -> x + y) FROM t;
|
|
426
|
-
|
|
427
|
-
-- MAP 函数
|
|
428
|
-
SELECT MAP_KEYS(meta) FROM t;
|
|
429
|
-
SELECT MAP_VALUES(meta) FROM t;
|
|
430
|
-
SELECT MAP_ENTRIES(meta) FROM t;
|
|
431
|
-
SELECT MAP_CONCAT(m1, m2) FROM t;
|
|
432
|
-
SELECT MAP_FILTER(meta, (k, v) -> v > 0) FROM t;
|
|
433
|
-
SELECT MAP_TRANSFORM_VALUES(meta, (k, v) -> v * 2) FROM t;
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
**与 Snowflake 差异:**
|
|
437
|
-
- Snowflake `ARRAY_SIZE` → ClickZetta `SIZE`
|
|
438
|
-
- Snowflake `ARRAY_CONTAINS(val, arr)` 参数顺序相反 → ClickZetta `ARRAY_CONTAINS(arr, val)`
|
|
439
|
-
- Snowflake `OBJECT_KEYS(obj)` → ClickZetta `MAP_KEYS(map)`
|
|
440
|
-
- Snowflake 无高阶函数(TRANSFORM/FILTER);ClickZetta 支持
|
|
441
|
-
|
|
442
|
-
---
|
|
443
|
-
|
|
444
|
-
## PIVOT / UNPIVOT
|
|
445
|
-
|
|
446
|
-
```sql
|
|
447
|
-
-- ClickZetta 不支持原生 PIVOT 语法
|
|
448
|
-
-- 用 CASE WHEN 实现行转列
|
|
449
|
-
SELECT
|
|
450
|
-
product,
|
|
451
|
-
SUM(CASE WHEN month = 'Jan' THEN amount ELSE 0 END) AS Jan,
|
|
452
|
-
SUM(CASE WHEN month = 'Feb' THEN amount ELSE 0 END) AS Feb,
|
|
453
|
-
SUM(CASE WHEN month = 'Mar' THEN amount ELSE 0 END) AS Mar
|
|
454
|
-
FROM sales
|
|
455
|
-
GROUP BY product;
|
|
456
|
-
|
|
457
|
-
-- UNPIVOT 用 LATERAL VIEW + STACK 实现
|
|
458
|
-
SELECT id, month, amount
|
|
459
|
-
FROM sales
|
|
460
|
-
LATERAL VIEW STACK(3,
|
|
461
|
-
'Jan', jan_amount,
|
|
462
|
-
'Feb', feb_amount,
|
|
463
|
-
'Mar', mar_amount
|
|
464
|
-
) t AS month, amount;
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
**与 Snowflake 差异:**
|
|
468
|
-
- Snowflake 原生支持 `PIVOT` / `UNPIVOT` 语法;ClickZetta 不支持,需手动实现
|
|
469
|
-
|
|
470
|
-
---
|
|
471
|
-
|
|
472
|
-
## SET 操作
|
|
473
|
-
|
|
474
|
-
```sql
|
|
475
|
-
-- ClickZetta 支持 UNION / UNION ALL / INTERSECT / EXCEPT 集合操作
|
|
476
|
-
SELECT id FROM orders_2023
|
|
477
|
-
UNION ALL
|
|
478
|
-
SELECT id FROM orders_2024;
|
|
479
|
-
|
|
480
|
-
SELECT id FROM orders_2023
|
|
481
|
-
UNION
|
|
482
|
-
SELECT id FROM orders_2024;
|
|
483
|
-
|
|
484
|
-
SELECT id FROM orders_2023
|
|
485
|
-
INTERSECT
|
|
486
|
-
SELECT id FROM orders_2024;
|
|
487
|
-
|
|
488
|
-
SELECT id FROM orders_2023
|
|
489
|
-
EXCEPT
|
|
490
|
-
SELECT id FROM orders_2024;
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
---
|
|
494
|
-
|
|
495
|
-
## HINTS(查询提示)
|
|
496
|
-
|
|
497
|
-
```sql
|
|
498
|
-
-- MAPJOIN(强制广播小表)
|
|
499
|
-
SELECT /*+ MAPJOIN(small_table) */ *
|
|
500
|
-
FROM large_table l JOIN small_table s ON l.id = s.id;
|
|
501
|
-
|
|
502
|
-
-- 向量索引探索因子
|
|
503
|
-
SET cz.vector.index.search.ef = 128;
|
|
504
|
-
```
|