@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,346 +0,0 @@
|
|
|
1
|
-
# ClickZetta Lakehouse vs Snowflake SQL 差异
|
|
2
|
-
|
|
3
|
-
> 来源:产品文档 + 迁移实践
|
|
4
|
-
|
|
5
|
-
## 对象概念映射
|
|
6
|
-
|
|
7
|
-
| ClickZetta Lakehouse | Snowflake | 说明 |
|
|
8
|
-
|---|---|---|
|
|
9
|
-
| WORKSPACE | DATABASE | 工作空间 ≈ 数据库 |
|
|
10
|
-
| SCHEMA | SCHEMA | 相同 |
|
|
11
|
-
| VCLUSTER | WAREHOUSE | 计算集群 |
|
|
12
|
-
| STORAGE CONNECTION | STORAGE INTEGRATION | 对象存储认证 |
|
|
13
|
-
| VOLUME | STAGE | 文件存储区域 |
|
|
14
|
-
| TABLE | TABLE | 相同 |
|
|
15
|
-
| PIPE | SNOWPIPE | 持续导入管道 |
|
|
16
|
-
| TABLE STREAM | STREAM | 变更数据捕获 |
|
|
17
|
-
| DYNAMIC TABLE | DYNAMIC TABLE | 增量计算表(语法不同) |
|
|
18
|
-
| Studio 任务 | TASK | 调度任务 |
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## DDL 差异
|
|
23
|
-
|
|
24
|
-
### CREATE OR REPLACE vs IF NOT EXISTS
|
|
25
|
-
|
|
26
|
-
```sql
|
|
27
|
-
-- Snowflake:支持 CREATE OR REPLACE
|
|
28
|
-
CREATE OR REPLACE TABLE orders (id INT, amount DECIMAL);
|
|
29
|
-
|
|
30
|
-
-- ClickZetta:不支持 CREATE OR REPLACE,用 IF NOT EXISTS
|
|
31
|
-
CREATE TABLE IF NOT EXISTS orders (id INT, amount DECIMAL);
|
|
32
|
-
-- 修改已有表用 ALTER TABLE
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### 注释语法
|
|
36
|
-
|
|
37
|
-
```sql
|
|
38
|
-
-- Snowflake:支持 // 和 ///
|
|
39
|
-
// 这是注释
|
|
40
|
-
/// 这也是注释
|
|
41
|
-
|
|
42
|
-
-- ClickZetta:只支持 -- 和 /* */
|
|
43
|
-
-- 这是注释
|
|
44
|
-
/* 这也是注释 */
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### 数据类型差异
|
|
48
|
-
|
|
49
|
-
| ClickZetta | Snowflake | 说明 |
|
|
50
|
-
|---|---|---|
|
|
51
|
-
| `STRING` | `VARCHAR` / `TEXT` | ClickZetta 推荐用 STRING |
|
|
52
|
-
| `TIMESTAMP` | `TIMESTAMP_LTZ` | 本地时区时间戳 |
|
|
53
|
-
| `TIMESTAMP_NTZ` | `TIMESTAMP_NTZ` | 无时区时间戳 |
|
|
54
|
-
| `JSON` | `VARIANT` | 半结构化数据 |
|
|
55
|
-
| `ARRAY<T>` | `ARRAY` | ClickZetta 需指定元素类型 |
|
|
56
|
-
| `MAP<K,V>` | `OBJECT` | 键值对 |
|
|
57
|
-
| `STRUCT<f:T,...>` | `OBJECT` | 结构体 |
|
|
58
|
-
| `VECTOR(FLOAT, N)` | 无原生支持 | 向量类型(ClickZetta 特有) |
|
|
59
|
-
| `TINYINT` | `NUMBER(3,0)` | 1字节整数 |
|
|
60
|
-
| `SMALLINT` | `NUMBER(5,0)` | 2字节整数 |
|
|
61
|
-
| 无 `NUMBER` | `NUMBER(p,s)` | ClickZetta 用 `DECIMAL(p,s)` |
|
|
62
|
-
|
|
63
|
-
### ⚠️ 写入时隐式类型转换(重要差异)
|
|
64
|
-
|
|
65
|
-
Snowflake 允许写入时字符串隐式转换为日期/布尔等类型,ClickZetta **不允许**:
|
|
66
|
-
|
|
67
|
-
| 操作 | Snowflake | ClickZetta |
|
|
68
|
-
|---|---|---|
|
|
69
|
-
| INSERT 字符串→DATE | ✅ 允许 | ❌ 报错,需 `CAST` 或 `DATE '...'` |
|
|
70
|
-
| INSERT 字符串→TIMESTAMP | ✅ 允许 | ❌ 报错,需 `CAST` 或 `TIMESTAMP '...'` |
|
|
71
|
-
| INSERT 字符串→BOOLEAN | ✅ 允许 | ❌ 报错,需 `TRUE`/`FALSE` 或 `CAST` |
|
|
72
|
-
| INSERT 字符串→INT | ✅ 允许 | ❌ 报错,需 `CAST('123' AS INT)` |
|
|
73
|
-
| INSERT 字符串→JSON | ✅ 允许 | ❌ 报错,需 `PARSE_JSON(...)` 或 `CAST` |
|
|
74
|
-
| UPDATE 字符串→DATE | ✅ 允许 | ❌ 报错,需 `CAST` |
|
|
75
|
-
| WHERE 字符串=DATE | ✅ 允许 | ✅ 允许(查询中可隐式比较) |
|
|
76
|
-
|
|
77
|
-
### 建表语法差异
|
|
78
|
-
|
|
79
|
-
```sql
|
|
80
|
-
-- Snowflake:CLUSTER BY
|
|
81
|
-
CREATE TABLE orders (id INT, dt DATE)
|
|
82
|
-
CLUSTER BY (dt);
|
|
83
|
-
|
|
84
|
-
-- ClickZetta:CLUSTERED BY + PARTITIONED BY
|
|
85
|
-
CREATE TABLE orders (
|
|
86
|
-
id INT,
|
|
87
|
-
dt DATE
|
|
88
|
-
)
|
|
89
|
-
PARTITIONED BY (dt)
|
|
90
|
-
CLUSTERED BY (id) INTO 8 BUCKETS;
|
|
91
|
-
|
|
92
|
-
-- ClickZetta 特有:Sort Key(内联索引)
|
|
93
|
-
CREATE TABLE orders (
|
|
94
|
-
id INT,
|
|
95
|
-
amount DECIMAL,
|
|
96
|
-
INDEX amount_bf (amount) USING BLOOM_FILTER
|
|
97
|
-
);
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## DML 差异
|
|
103
|
-
|
|
104
|
-
### INSERT
|
|
105
|
-
|
|
106
|
-
```sql
|
|
107
|
-
-- 两者基本相同,ClickZetta 额外支持:
|
|
108
|
-
INSERT OVERWRITE TABLE orders SELECT * FROM staging; -- 覆盖写入(Hive 风格)
|
|
109
|
-
INSERT INTO orders PARTITION (dt='2024-01-01') VALUES (1, 100); -- 静态分区
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### UPDATE
|
|
113
|
-
|
|
114
|
-
```sql
|
|
115
|
-
-- Snowflake
|
|
116
|
-
UPDATE orders SET amount = amount * 1.1 WHERE status = 'VIP';
|
|
117
|
-
|
|
118
|
-
-- ClickZetta:相同语法,额外支持 ORDER BY + LIMIT
|
|
119
|
-
UPDATE orders SET amount = amount * 1.1
|
|
120
|
-
WHERE status = 'VIP'
|
|
121
|
-
ORDER BY created_at DESC
|
|
122
|
-
LIMIT 1000;
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### MERGE INTO
|
|
126
|
-
|
|
127
|
-
```sql
|
|
128
|
-
-- ClickZetta 限制:WHEN NOT MATCHED 只能有一个
|
|
129
|
-
-- Snowflake 支持多个 WHEN NOT MATCHED
|
|
130
|
-
|
|
131
|
-
-- ClickZetta MERGE 示例(⚠️ UPDATE 必须在 DELETE 之前)
|
|
132
|
-
MERGE INTO target t
|
|
133
|
-
USING source s ON t.id = s.id
|
|
134
|
-
WHEN MATCHED THEN UPDATE SET t.amount = s.amount
|
|
135
|
-
WHEN MATCHED AND s.action = 'DELETE' THEN DELETE
|
|
136
|
-
WHEN NOT MATCHED THEN INSERT (id, amount) VALUES (s.id, s.amount);
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## 查询语法差异
|
|
142
|
-
|
|
143
|
-
### SELECT 扩展
|
|
144
|
-
|
|
145
|
-
```sql
|
|
146
|
-
-- ClickZetta 特有:SELECT * EXCEPT(col)
|
|
147
|
-
SELECT * EXCEPT(sensitive_col) FROM users;
|
|
148
|
-
|
|
149
|
-
-- ClickZetta 特有:GROUP BY ALL(自动推断分组列)
|
|
150
|
-
SELECT year, month, SUM(amount)
|
|
151
|
-
FROM orders
|
|
152
|
-
GROUP BY ALL;
|
|
153
|
-
|
|
154
|
-
-- 两者都支持:GROUPING SETS / ROLLUP / CUBE
|
|
155
|
-
SELECT region, product, SUM(sales)
|
|
156
|
-
FROM orders
|
|
157
|
-
GROUP BY GROUPING SETS ((region), (product), ());
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### JSON 查询
|
|
161
|
-
|
|
162
|
-
```sql
|
|
163
|
-
-- Snowflake:VARIANT 类型,用 : 访问
|
|
164
|
-
SELECT data:address:city FROM users;
|
|
165
|
-
SELECT data[0]:name FROM users;
|
|
166
|
-
|
|
167
|
-
-- ClickZetta:JSON 类型,用 [] 访问
|
|
168
|
-
SELECT data['address']['city'] FROM users;
|
|
169
|
-
SELECT data['phoneNumbers'][0]['number'] FROM users;
|
|
170
|
-
|
|
171
|
-
-- 两者都支持 PARSE_JSON
|
|
172
|
-
SELECT parse_json('{"name":"Alice"}')['name'];
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### LATERAL VIEW(展开数组)
|
|
176
|
-
|
|
177
|
-
```sql
|
|
178
|
-
-- ClickZetta(Hive 风格)
|
|
179
|
-
SELECT e.id, s.skill
|
|
180
|
-
FROM employees e
|
|
181
|
-
LATERAL VIEW EXPLODE(e.skills) s AS skill;
|
|
182
|
-
|
|
183
|
-
-- Snowflake(用 FLATTEN)
|
|
184
|
-
SELECT e.id, f.value::STRING AS skill
|
|
185
|
-
FROM employees e,
|
|
186
|
-
LATERAL FLATTEN(input => e.skills) f;
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### QUALIFY(窗口函数过滤)
|
|
190
|
-
|
|
191
|
-
```sql
|
|
192
|
-
-- 两者都支持 QUALIFY
|
|
193
|
-
SELECT * FROM orders
|
|
194
|
-
QUALIFY ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) = 1;
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### PIVOT / UNPIVOT
|
|
198
|
-
|
|
199
|
-
```sql
|
|
200
|
-
-- Snowflake 原生支持 PIVOT
|
|
201
|
-
SELECT * FROM sales
|
|
202
|
-
PIVOT (SUM(amount) FOR month IN ('Jan', 'Feb', 'Mar'));
|
|
203
|
-
|
|
204
|
-
-- ClickZetta:用 CASE WHEN 实现
|
|
205
|
-
SELECT
|
|
206
|
-
product,
|
|
207
|
-
SUM(CASE WHEN month = 'Jan' THEN amount END) AS Jan,
|
|
208
|
-
SUM(CASE WHEN month = 'Feb' THEN amount END) AS Feb
|
|
209
|
-
FROM sales GROUP BY product;
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## 流(Stream)差异
|
|
215
|
-
|
|
216
|
-
```sql
|
|
217
|
-
-- Snowflake Stream 元数据字段
|
|
218
|
-
METADATA$ACTION -- 'INSERT' / 'DELETE'
|
|
219
|
-
METADATA$ISUPDATE -- TRUE/FALSE
|
|
220
|
-
METADATA$ROW_ID -- 行唯一标识
|
|
221
|
-
|
|
222
|
-
-- ClickZetta Table Stream 元数据字段
|
|
223
|
-
__change_type -- 'INSERT' / 'UPDATE_BEFORE' / 'UPDATE_AFTER' / 'DELETE'
|
|
224
|
-
__commit_version -- 提交版本号
|
|
225
|
-
__commit_timestamp -- 提交时间戳
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
## 动态表(Dynamic Table)差异
|
|
231
|
-
|
|
232
|
-
```sql
|
|
233
|
-
-- Snowflake Dynamic Table
|
|
234
|
-
CREATE DYNAMIC TABLE product_sales
|
|
235
|
-
TARGET_LAG = '1 minutes'
|
|
236
|
-
WAREHOUSE = my_warehouse
|
|
237
|
-
AS SELECT ...;
|
|
238
|
-
|
|
239
|
-
-- ClickZetta Dynamic Table(不支持 TARGET_LAG)
|
|
240
|
-
CREATE DYNAMIC TABLE product_sales
|
|
241
|
-
REFRESH INTERVAL 1 MINUTE VCLUSTER default_ap
|
|
242
|
-
AS SELECT ...;
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## 对象存储(Stage vs Volume)
|
|
248
|
-
|
|
249
|
-
```sql
|
|
250
|
-
-- Snowflake:Stage
|
|
251
|
-
CREATE STAGE my_stage
|
|
252
|
-
URL = 's3://bucket/path'
|
|
253
|
-
STORAGE_INTEGRATION = my_integration;
|
|
254
|
-
|
|
255
|
-
COPY INTO orders FROM @my_stage/data.csv;
|
|
256
|
-
|
|
257
|
-
-- ClickZetta:Volume
|
|
258
|
-
CREATE EXTERNAL VOLUME my_volume
|
|
259
|
-
LOCATION = 'oss://bucket/path'
|
|
260
|
-
USING CONNECTION my_oss_conn;
|
|
261
|
-
|
|
262
|
-
COPY INTO orders FROM VOLUME my_volume USING CSV;
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## 函数差异
|
|
268
|
-
|
|
269
|
-
### 日期函数
|
|
270
|
-
|
|
271
|
-
```sql
|
|
272
|
-
-- Snowflake
|
|
273
|
-
DATEADD(day, 7, order_date)
|
|
274
|
-
DATEDIFF(day, start_date, end_date)
|
|
275
|
-
DATE_TRUNC('month', order_date)
|
|
276
|
-
TO_DATE('2024-01-01')
|
|
277
|
-
CURRENT_TIMESTAMP()
|
|
278
|
-
|
|
279
|
-
-- ClickZetta(兼容 Hive/Spark 风格,同时也支持 Snowflake 风格)
|
|
280
|
-
DATEADD(day, 7, order_date) -- ✅ 与 Snowflake 相同语法也支持
|
|
281
|
-
DATE_ADD(order_date, 7) -- 或 Hive 风格
|
|
282
|
-
DATEDIFF(end_date, start_date) -- 注意参数顺序相反!
|
|
283
|
-
DATE_TRUNC('month', order_date) -- 相同
|
|
284
|
-
TO_DATE('2024-01-01') -- 相同
|
|
285
|
-
CURRENT_TIMESTAMP() -- 相同,也支持 NOW()
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
### 字符串函数
|
|
289
|
-
|
|
290
|
-
```sql
|
|
291
|
-
-- Snowflake
|
|
292
|
-
CHARINDEX('sub', str) -- 查找子串位置
|
|
293
|
-
EDITDISTANCE(s1, s2) -- 编辑距离
|
|
294
|
-
SOUNDEX(str) -- 语音相似度
|
|
295
|
-
INITCAP(str) -- 首字母大写
|
|
296
|
-
|
|
297
|
-
-- ClickZetta
|
|
298
|
-
INSTR(str, 'sub') -- 查找子串位置(Hive 风格)
|
|
299
|
-
LOCATE('sub', str) -- 也支持
|
|
300
|
-
LEVENSHTEIN(s1, s2) -- 编辑距离
|
|
301
|
-
INITCAP(str) -- 相同
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### 条件函数
|
|
305
|
-
|
|
306
|
-
```sql
|
|
307
|
-
-- Snowflake
|
|
308
|
-
IFF(condition, true_val, false_val)
|
|
309
|
-
ZEROIFNULL(expr)
|
|
310
|
-
NULLIFZERO(expr)
|
|
311
|
-
DECODE(expr, val1, res1, val2, res2, default)
|
|
312
|
-
|
|
313
|
-
-- ClickZetta
|
|
314
|
-
IF(condition, true_val, false_val) -- 或 CASE WHEN
|
|
315
|
-
COALESCE(expr, 0) -- 替代 ZEROIFNULL
|
|
316
|
-
NULLIF(expr, 0) -- 替代 NULLIFZERO
|
|
317
|
-
DECODE(expr, val1, res1, ...) -- 支持(兼容)
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### 聚合函数
|
|
321
|
-
|
|
322
|
-
```sql
|
|
323
|
-
-- Snowflake
|
|
324
|
-
LISTAGG(col, ',') WITHIN GROUP (ORDER BY col)
|
|
325
|
-
ARRAY_AGG(col)
|
|
326
|
-
OBJECT_AGG(key, value)
|
|
327
|
-
APPROX_COUNT_DISTINCT(col)
|
|
328
|
-
|
|
329
|
-
-- ClickZetta
|
|
330
|
-
GROUP_CONCAT(col ORDER BY col SEPARATOR ',') -- 替代 LISTAGG
|
|
331
|
-
ARRAY_AGG(col) -- 相同
|
|
332
|
-
MAP_AGG(key, value) -- 替代 OBJECT_AGG
|
|
333
|
-
APPROX_COUNT_DISTINCT(col) -- 相同
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
---
|
|
337
|
-
|
|
338
|
-
## 权限体系差异
|
|
339
|
-
|
|
340
|
-
| 概念 | ClickZetta | Snowflake |
|
|
341
|
-
|---|---|---|
|
|
342
|
-
| 顶层容器 | WORKSPACE | DATABASE |
|
|
343
|
-
| 权限对象 | VCLUSTER / SCHEMA / TABLE / VIEW | WAREHOUSE / DATABASE / SCHEMA / TABLE |
|
|
344
|
-
| 角色授予 | `GRANT ROLE r TO USER u` | `GRANT ROLE r TO USER u` |
|
|
345
|
-
| 查看权限 | `SHOW GRANTS TO USER u` | `SHOW GRANTS TO USER u` |
|
|
346
|
-
| 系统角色 | instance_admin / workspace_admin / workspace_dev / workspace_analyst | ACCOUNTADMIN / SYSADMIN / USERADMIN |
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
# ClickZetta Lakehouse vs Spark SQL 差异
|
|
2
|
-
|
|
3
|
-
> 来源:产品文档 + Spark Connector 文档
|
|
4
|
-
|
|
5
|
-
## 数据类型映射
|
|
6
|
-
|
|
7
|
-
| ClickZetta | Spark SQL | 说明 |
|
|
8
|
-
|---|---|---|
|
|
9
|
-
| `BOOLEAN` | `BooleanType` | 相同 |
|
|
10
|
-
| `TINYINT` | `ByteType` | 1字节 |
|
|
11
|
-
| `SMALLINT` | `ShortType` | 2字节 |
|
|
12
|
-
| `INT` | `IntegerType` | 4字节 |
|
|
13
|
-
| `BIGINT` | `LongType` | 8字节 |
|
|
14
|
-
| `FLOAT` | `FloatType` | 4字节浮点 |
|
|
15
|
-
| `DOUBLE` | `DoubleType` | 8字节浮点 |
|
|
16
|
-
| `DECIMAL(p,s)` | `DecimalType(p,s)` | 精确数值 |
|
|
17
|
-
| `STRING` / `VARCHAR` | `StringType` | 字符串 |
|
|
18
|
-
| `BINARY` | `BinaryType` | 二进制 |
|
|
19
|
-
| `DATE` | `DateType` | 日期 |
|
|
20
|
-
| `TIMESTAMP` | `TimestampType` | 带时区时间戳 |
|
|
21
|
-
| `TIMESTAMP_NTZ` | `TimestampNTZType` | 无时区时间戳 |
|
|
22
|
-
| `ARRAY<T>` | `ArrayType` | 数组 |
|
|
23
|
-
| `MAP<K,V>` | `MapType` | 键值对 |
|
|
24
|
-
| `STRUCT<f:T>` | `StructType` | 结构体 |
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## 建表语法差异
|
|
29
|
-
|
|
30
|
-
### 分区
|
|
31
|
-
|
|
32
|
-
```sql
|
|
33
|
-
-- Spark SQL:PARTITIONED BY
|
|
34
|
-
CREATE TABLE orders (id INT, amount DECIMAL, dt STRING)
|
|
35
|
-
USING PARQUET
|
|
36
|
-
PARTITIONED BY (dt);
|
|
37
|
-
|
|
38
|
-
-- ClickZetta:相同语法,但不需要 USING 子句
|
|
39
|
-
CREATE TABLE orders (id INT, amount DECIMAL, dt STRING)
|
|
40
|
-
PARTITIONED BY (dt);
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Bucket(分桶)
|
|
44
|
-
|
|
45
|
-
```sql
|
|
46
|
-
-- Spark SQL
|
|
47
|
-
CREATE TABLE orders (id INT, amount DECIMAL)
|
|
48
|
-
CLUSTERED BY (id) INTO 8 BUCKETS;
|
|
49
|
-
|
|
50
|
-
-- ClickZetta:相同语法
|
|
51
|
-
CREATE TABLE orders (id INT, amount DECIMAL)
|
|
52
|
-
CLUSTERED BY (id) INTO 8 BUCKETS;
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 表属性
|
|
56
|
-
|
|
57
|
-
```sql
|
|
58
|
-
-- Spark SQL:TBLPROPERTIES
|
|
59
|
-
CREATE TABLE orders (id INT)
|
|
60
|
-
TBLPROPERTIES ('delta.enableChangeDataFeed' = 'true');
|
|
61
|
-
|
|
62
|
-
-- ClickZetta:PROPERTIES
|
|
63
|
-
CREATE TABLE orders (id INT)
|
|
64
|
-
PROPERTIES ('data_lifecycle' = '30'); -- 数据保留天数
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 查询语法差异
|
|
70
|
-
|
|
71
|
-
### LATERAL VIEW(展开数组)
|
|
72
|
-
|
|
73
|
-
```sql
|
|
74
|
-
-- 两者语法相同(ClickZetta 兼容 Hive/Spark 风格)
|
|
75
|
-
SELECT id, skill
|
|
76
|
-
FROM employees
|
|
77
|
-
LATERAL VIEW EXPLODE(skills) t AS skill;
|
|
78
|
-
|
|
79
|
-
-- POSEXPLODE(带位置索引)
|
|
80
|
-
SELECT id, pos, skill
|
|
81
|
-
FROM employees
|
|
82
|
-
LATERAL VIEW POSEXPLODE(skills) t AS pos, skill;
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### 窗口函数
|
|
86
|
-
|
|
87
|
-
```sql
|
|
88
|
-
-- 两者基本相同
|
|
89
|
-
SELECT id, amount,
|
|
90
|
-
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) AS rn,
|
|
91
|
-
SUM(amount) OVER (PARTITION BY customer_id
|
|
92
|
-
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total
|
|
93
|
-
FROM orders;
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### CTE(公用表表达式)
|
|
97
|
-
|
|
98
|
-
```sql
|
|
99
|
-
-- 两者语法相同
|
|
100
|
-
WITH
|
|
101
|
-
monthly_sales AS (
|
|
102
|
-
SELECT DATE_TRUNC('month', order_date) AS month, SUM(amount) AS total
|
|
103
|
-
FROM orders GROUP BY 1
|
|
104
|
-
),
|
|
105
|
-
ranked AS (
|
|
106
|
-
SELECT *, RANK() OVER (ORDER BY total DESC) AS rnk FROM monthly_sales
|
|
107
|
-
)
|
|
108
|
-
SELECT * FROM ranked WHERE rnk <= 3;
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### STRUCT / ARRAY 操作
|
|
112
|
-
|
|
113
|
-
```sql
|
|
114
|
-
-- Spark SQL
|
|
115
|
-
SELECT address.city FROM users; -- STRUCT 字段访问
|
|
116
|
-
SELECT skills[0] FROM employees; -- ARRAY 索引
|
|
117
|
-
SELECT EXPLODE(skills) FROM employees; -- 展开数组
|
|
118
|
-
SELECT TRANSFORM(skills, x -> UPPER(x)) FROM emp; -- 数组变换
|
|
119
|
-
|
|
120
|
-
-- ClickZetta(相同语法)
|
|
121
|
-
SELECT address.city FROM users;
|
|
122
|
-
SELECT skills[0] FROM employees;
|
|
123
|
-
SELECT EXPLODE(skills) FROM employees;
|
|
124
|
-
SELECT TRANSFORM(skills, x -> UPPER(x)) FROM emp;
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## 函数差异
|
|
130
|
-
|
|
131
|
-
### 日期函数
|
|
132
|
-
|
|
133
|
-
```sql
|
|
134
|
-
-- 两者基本兼容
|
|
135
|
-
DATE_ADD(date, days)
|
|
136
|
-
DATE_SUB(date, days)
|
|
137
|
-
DATEDIFF(end_date, start_date) -- 注意:ClickZetta 参数顺序与 Snowflake 相反
|
|
138
|
-
DATE_TRUNC('month', date)
|
|
139
|
-
DATE_FORMAT(date, 'yyyy-MM-dd')
|
|
140
|
-
FROM_UNIXTIME(unix_ts)
|
|
141
|
-
UNIX_TIMESTAMP(date_str)
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### 字符串函数
|
|
145
|
-
|
|
146
|
-
```sql
|
|
147
|
-
-- 两者基本兼容
|
|
148
|
-
CONCAT(s1, s2, ...)
|
|
149
|
-
CONCAT_WS(',', s1, s2, ...)
|
|
150
|
-
SPLIT(str, ',')
|
|
151
|
-
REGEXP_EXTRACT(str, pattern, group)
|
|
152
|
-
REGEXP_REPLACE(str, pattern, replacement)
|
|
153
|
-
INSTR(str, substr)
|
|
154
|
-
SUBSTR(str, pos, len)
|
|
155
|
-
TRIM(str) / LTRIM(str) / RTRIM(str)
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### 聚合函数
|
|
159
|
-
|
|
160
|
-
```sql
|
|
161
|
-
-- 两者基本兼容
|
|
162
|
-
COUNT(*) / COUNT(DISTINCT col)
|
|
163
|
-
SUM / AVG / MAX / MIN
|
|
164
|
-
COLLECT_LIST(col) -- Spark:返回数组(含重复)
|
|
165
|
-
COLLECT_SET(col) -- Spark:返回去重数组
|
|
166
|
-
ARRAY_AGG(col) -- ClickZetta:等价于 COLLECT_LIST
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## ClickZetta 特有功能(Spark 无对应)
|
|
172
|
-
|
|
173
|
-
```sql
|
|
174
|
-
-- 1. VCLUSTER(计算集群管理)
|
|
175
|
-
CREATE VCLUSTER my_vc VCLUSTER_TYPE = ANALYTICS VCLUSTER_SIZE = 4;
|
|
176
|
-
USE VCLUSTER my_vc;
|
|
177
|
-
|
|
178
|
-
-- 2. DYNAMIC TABLE(增量计算)
|
|
179
|
-
CREATE DYNAMIC TABLE sales_summary
|
|
180
|
-
REFRESH INTERVAL 5 MINUTE VCLUSTER default_ap
|
|
181
|
-
AS SELECT customer_id, SUM(amount) FROM orders GROUP BY 1;
|
|
182
|
-
|
|
183
|
-
-- 3. TABLE STREAM(CDC 变更捕获)
|
|
184
|
-
CREATE TABLE STREAM orders_stream ON TABLE orders
|
|
185
|
-
WITH PROPERTIES ('TABLE_STREAM_MODE' = 'STANDARD');
|
|
186
|
-
|
|
187
|
-
-- 4. PIPE(持续导入)
|
|
188
|
-
CREATE PIPE my_pipe
|
|
189
|
-
AS COPY INTO orders FROM VOLUME my_volume USING CSV;
|
|
190
|
-
|
|
191
|
-
-- 5. VECTOR 类型(向量检索)
|
|
192
|
-
CREATE TABLE embeddings (id INT, vec VECTOR(FLOAT, 1024));
|
|
193
|
-
SELECT id, cosine_distance(vec, vector(0.1, 0.2, ...)) AS dist
|
|
194
|
-
FROM embeddings ORDER BY dist LIMIT 10;
|
|
195
|
-
|
|
196
|
-
-- 6. Time Travel
|
|
197
|
-
SELECT * FROM orders TIMESTAMP AS OF '2024-01-01 00:00:00';
|
|
198
|
-
RESTORE TABLE orders TO TIMESTAMP AS OF '2024-01-01 00:00:00';
|
|
199
|
-
UNDROP TABLE orders;
|
|
200
|
-
|
|
201
|
-
-- 7. SHARE(跨实例数据共享)
|
|
202
|
-
CREATE SHARE my_share;
|
|
203
|
-
GRANT SELECT, READ METADATA ON TABLE public.orders TO SHARE my_share;
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## Spark SQL 特有功能(ClickZetta 无对应或语法不同)
|
|
209
|
-
|
|
210
|
-
```sql
|
|
211
|
-
-- 1. Delta Lake 特有语法(ClickZetta 无对应)
|
|
212
|
-
OPTIMIZE table_name ZORDER BY (col); -- ClickZetta 有 OPTIMIZE 但无 ZORDER
|
|
213
|
-
VACUUM table_name RETAIN 168 HOURS; -- ClickZetta 自动管理,无需手动 VACUUM
|
|
214
|
-
|
|
215
|
-
-- 2. SHOW TABLES EXTENDED(ClickZetta 无对应)
|
|
216
|
-
SHOW TABLES EXTENDED IN schema LIKE 'orders*';
|
|
217
|
-
|
|
218
|
-
-- 3. DESCRIBE HISTORY(Delta)→ ClickZetta 用 DESC HISTORY
|
|
219
|
-
-- Spark/Delta:
|
|
220
|
-
DESCRIBE HISTORY orders;
|
|
221
|
-
-- ClickZetta:
|
|
222
|
-
DESC HISTORY orders;
|
|
223
|
-
|
|
224
|
-
-- 4. 生成列(语法不同)
|
|
225
|
-
-- Spark:
|
|
226
|
-
CREATE TABLE orders (id INT, year INT GENERATED ALWAYS AS (YEAR(order_date)));
|
|
227
|
-
-- ClickZetta(相同语法,也支持):
|
|
228
|
-
CREATE TABLE orders (id INT, year INT GENERATED ALWAYS AS (YEAR(order_date)));
|
|
229
|
-
```
|