@clickzetta/cz-cli-linux-x64 0.3.2 → 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 -450
- 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 -86
- 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 -117
- 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 -531
- package/bin/skills/clickzetta-kafka-ingest-pipeline/references/kafka-pipe-syntax.md +0 -186
- 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 -402
- 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 -353
- package/bin/skills/clickzetta-sql-pipeline-manager/evals/evals.json +0 -166
- package/bin/skills/clickzetta-sql-pipeline-manager/references/dynamic-table.md +0 -173
- package/bin/skills/clickzetta-sql-pipeline-manager/references/materialized-view.md +0 -129
- package/bin/skills/clickzetta-sql-pipeline-manager/references/pipe.md +0 -160
- package/bin/skills/clickzetta-sql-pipeline-manager/references/table-stream.md +0 -123
- 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 -155
- 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 -249
- package/bin/skills/clickzetta-volume-manager/references/volume-ddl.md +0 -194
- package/bin/skills/clickzetta-zettapark/SKILL.md +0 -248
- package/bin/skills/clickzetta-zettapark/references/zettapark-api.md +0 -283
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
# Snowflake → ClickZetta 迁移指南
|
|
2
|
-
|
|
3
|
-
> 全面覆盖从 Snowflake 迁移到 ClickZetta Lakehouse 时遇到的 SQL 兼容性问题,所有结论均经过真实 Lakehouse 验证。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 对象概念映射
|
|
8
|
-
|
|
9
|
-
| Snowflake | ClickZetta | 说明 |
|
|
10
|
-
|---|---|---|
|
|
11
|
-
| DATABASE | WORKSPACE | 顶层容器 |
|
|
12
|
-
| SCHEMA | SCHEMA | 相同 |
|
|
13
|
-
| WAREHOUSE | VCLUSTER | 计算集群 |
|
|
14
|
-
| STAGE | VOLUME | 文件存储区域 |
|
|
15
|
-
| STORAGE INTEGRATION | STORAGE CONNECTION | 对象存储认证 |
|
|
16
|
-
| SNOWPIPE | PIPE | 持续导入管道 |
|
|
17
|
-
| STREAM | TABLE STREAM | CDC 变更捕获 |
|
|
18
|
-
| DYNAMIC TABLE | DYNAMIC TABLE | 语法不同 |
|
|
19
|
-
| TASK | Studio 任务 | 调度任务 |
|
|
20
|
-
| SEQUENCE | IDENTITY 列 | 自增序列 |
|
|
21
|
-
| SHARE | SHARE | 跨实例数据共享(语法相同) |
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## DDL 差异
|
|
26
|
-
|
|
27
|
-
### CREATE TABLE
|
|
28
|
-
|
|
29
|
-
```sql
|
|
30
|
-
-- Snowflake
|
|
31
|
-
CREATE OR REPLACE TABLE orders (
|
|
32
|
-
id NUMBER AUTOINCREMENT,
|
|
33
|
-
customer_id NUMBER(10,0),
|
|
34
|
-
amount NUMBER(18,2),
|
|
35
|
-
status VARCHAR(50) DEFAULT 'pending',
|
|
36
|
-
created_at TIMESTAMP_LTZ DEFAULT CURRENT_TIMESTAMP(),
|
|
37
|
-
meta VARIANT,
|
|
38
|
-
tags ARRAY
|
|
39
|
-
) CLUSTER BY (DATE_TRUNC('month', created_at));
|
|
40
|
-
|
|
41
|
-
-- ClickZetta 等价写法
|
|
42
|
-
CREATE TABLE IF NOT EXISTS orders (
|
|
43
|
-
id BIGINT IDENTITY(1), -- AUTOINCREMENT → IDENTITY
|
|
44
|
-
customer_id INT, -- NUMBER(10,0) → INT
|
|
45
|
-
amount DECIMAL(18,2), -- NUMBER(18,2) → DECIMAL(18,2)
|
|
46
|
-
status STRING DEFAULT 'pending',
|
|
47
|
-
created_at TIMESTAMP DEFAULT current_timestamp(),
|
|
48
|
-
meta JSON, -- VARIANT → JSON
|
|
49
|
-
tags ARRAY<STRING> -- ARRAY → ARRAY<T>(需指定元素类型)
|
|
50
|
-
)
|
|
51
|
-
CLUSTERED BY (customer_id) INTO 16 BUCKETS; -- CLUSTER BY → CLUSTERED BY ... BUCKETS
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### 不支持的 DDL
|
|
55
|
-
|
|
56
|
-
```sql
|
|
57
|
-
-- ❌ CREATE OR REPLACE TABLE(用 IF NOT EXISTS)
|
|
58
|
-
CREATE OR REPLACE TABLE t (...);
|
|
59
|
-
-- ✅ ClickZetta
|
|
60
|
-
CREATE TABLE IF NOT EXISTS t (...);
|
|
61
|
-
|
|
62
|
-
-- ❌ CREATE SEQUENCE(用 IDENTITY 列)
|
|
63
|
-
CREATE SEQUENCE my_seq START 1 INCREMENT 1;
|
|
64
|
-
-- ✅ ClickZetta
|
|
65
|
-
CREATE TABLE t (id BIGINT IDENTITY(1), ...);
|
|
66
|
-
|
|
67
|
-
-- ❌ CREATE TEMPORARY TABLE(用 CTE 替代)
|
|
68
|
-
CREATE TEMPORARY TABLE temp_t AS SELECT ...;
|
|
69
|
-
-- ✅ ClickZetta
|
|
70
|
-
WITH temp_t AS (SELECT ...) SELECT * FROM temp_t;
|
|
71
|
-
|
|
72
|
-
-- ❌ CREATE TRANSIENT TABLE(用 data_lifecycle 控制)
|
|
73
|
-
CREATE TRANSIENT TABLE t (...);
|
|
74
|
-
-- ✅ ClickZetta
|
|
75
|
-
CREATE TABLE t (...) PROPERTIES ('data_lifecycle' = '1');
|
|
76
|
-
|
|
77
|
-
-- ❌ CLUSTER BY(列级别)
|
|
78
|
-
CREATE TABLE t (...) CLUSTER BY (col1, col2);
|
|
79
|
-
-- ✅ ClickZetta(分桶)
|
|
80
|
-
CREATE TABLE t (...) CLUSTERED BY (col1) INTO 16 BUCKETS;
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## 数据类型映射
|
|
86
|
-
|
|
87
|
-
| Snowflake | ClickZetta | 注意事项 |
|
|
88
|
-
|---|---|---|
|
|
89
|
-
| `NUMBER(p,s)` / `NUMERIC(p,s)` | `DECIMAL(p,s)` | |
|
|
90
|
-
| `NUMBER(10,0)` / `INTEGER` | `INT` / `BIGINT` | |
|
|
91
|
-
| `FLOAT` / `FLOAT4` | `FLOAT` | |
|
|
92
|
-
| `FLOAT8` / `DOUBLE` | `DOUBLE` | |
|
|
93
|
-
| `VARCHAR(n)` / `TEXT` | `STRING` 或 `VARCHAR(n)` | |
|
|
94
|
-
| `CHAR(n)` | `CHAR(n)` | 相同 |
|
|
95
|
-
| `BOOLEAN` | `BOOLEAN` | 相同,但写入规则不同(见下) |
|
|
96
|
-
| `DATE` | `DATE` | 相同 |
|
|
97
|
-
| `TIMESTAMP_LTZ` | `TIMESTAMP` | 带本地时区 |
|
|
98
|
-
| `TIMESTAMP_NTZ` | `TIMESTAMP_NTZ` | 无时区 |
|
|
99
|
-
| `TIMESTAMP_TZ` | `TIMESTAMP` | ClickZetta 无独立 TZ 类型 |
|
|
100
|
-
| `VARIANT` | `JSON` | 访问语法不同(见下) |
|
|
101
|
-
| `ARRAY` | `ARRAY<T>` | 需指定元素类型 |
|
|
102
|
-
| `OBJECT` | `MAP<STRING,STRING>` 或 `STRUCT<...>` | |
|
|
103
|
-
| `GEOGRAPHY` | 不支持 | |
|
|
104
|
-
| `VECTOR(FLOAT, N)` | `VECTOR(FLOAT, N)` | 相同 |
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## ⚠️ 写入时类型转换(重要差异)
|
|
109
|
-
|
|
110
|
-
Snowflake 允许字符串隐式转换为日期/布尔等类型,ClickZetta **不允许**:
|
|
111
|
-
|
|
112
|
-
```sql
|
|
113
|
-
-- ❌ Snowflake 可以,ClickZetta 报错
|
|
114
|
-
INSERT INTO t VALUES ('2024-01-15', 'true', '123');
|
|
115
|
-
|
|
116
|
-
-- ✅ ClickZetta 必须显式转换
|
|
117
|
-
INSERT INTO t VALUES (DATE '2024-01-15', TRUE, CAST('123' AS INT));
|
|
118
|
-
INSERT INTO t VALUES (CAST('2024-01-15' AS DATE), CAST('true' AS BOOLEAN), 123);
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
| 目标类型 | Snowflake | ClickZetta |
|
|
122
|
-
|---|---|---|
|
|
123
|
-
| `DATE` ← `'2024-01-15'` | ✅ 隐式 | ❌ 需 `DATE '...'` 或 `CAST` |
|
|
124
|
-
| `TIMESTAMP` ← `'2024-01-15 12:00'` | ✅ 隐式 | ❌ 需 `TIMESTAMP '...'` 或 `CAST` |
|
|
125
|
-
| `BOOLEAN` ← `'true'` | ✅ 隐式 | ❌ 需 `TRUE`/`FALSE` 或 `CAST` |
|
|
126
|
-
| `BOOLEAN` ← `1` | ✅ 隐式 | ❌ 需 `CAST(1 AS BOOLEAN)` |
|
|
127
|
-
| `INT` ← `'123'` | ✅ 隐式 | ❌ 需 `CAST('123' AS INT)` |
|
|
128
|
-
| `JSON` ← `'{"k":1}'` | ✅ 隐式 | ❌ 需 `PARSE_JSON(...)` 或 `CAST` |
|
|
129
|
-
| WHERE 中字符串比较 | ✅ | ✅ 允许 |
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## DML 差异
|
|
134
|
-
|
|
135
|
-
### INSERT / UPDATE
|
|
136
|
-
|
|
137
|
-
```sql
|
|
138
|
-
-- Snowflake:字符串可隐式转换
|
|
139
|
-
INSERT INTO orders VALUES (1, '2024-01-15', 'true');
|
|
140
|
-
|
|
141
|
-
-- ClickZetta:必须显式转换
|
|
142
|
-
INSERT INTO orders VALUES (1, DATE '2024-01-15', TRUE);
|
|
143
|
-
UPDATE orders SET dt = CAST('2024-06-01' AS DATE) WHERE id = 1;
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### MERGE INTO
|
|
147
|
-
|
|
148
|
-
```sql
|
|
149
|
-
-- Snowflake:支持多个 WHEN NOT MATCHED,支持 WHEN NOT MATCHED BY SOURCE
|
|
150
|
-
MERGE INTO t USING s ON t.id = s.id
|
|
151
|
-
WHEN MATCHED THEN UPDATE SET ...
|
|
152
|
-
WHEN NOT MATCHED THEN INSERT ...
|
|
153
|
-
WHEN NOT MATCHED BY SOURCE THEN DELETE; -- ❌ ClickZetta 不支持
|
|
154
|
-
|
|
155
|
-
-- ClickZetta:WHEN NOT MATCHED 只能有一个,UPDATE 必须在 DELETE 前
|
|
156
|
-
MERGE INTO t USING s ON t.id = s.id
|
|
157
|
-
WHEN MATCHED AND s.flag = 0 THEN UPDATE SET t.val = s.val -- UPDATE 在前
|
|
158
|
-
WHEN MATCHED AND s.flag = 1 THEN DELETE -- DELETE 在后
|
|
159
|
-
WHEN NOT MATCHED THEN INSERT (id, val) VALUES (s.id, s.val);
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### 事务
|
|
163
|
-
|
|
164
|
-
```sql
|
|
165
|
-
-- ❌ ClickZetta 不支持事务语法
|
|
166
|
-
BEGIN;
|
|
167
|
-
BEGIN TRANSACTION;
|
|
168
|
-
START TRANSACTION;
|
|
169
|
-
COMMIT;
|
|
170
|
-
ROLLBACK;
|
|
171
|
-
|
|
172
|
-
-- ✅ 用 MERGE 实现原子性 UPSERT
|
|
173
|
-
MERGE INTO target USING source ON ...
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## DQL 差异
|
|
179
|
-
|
|
180
|
-
### QUALIFY(窗口函数过滤)
|
|
181
|
-
|
|
182
|
-
```sql
|
|
183
|
-
-- 两者都支持 QUALIFY
|
|
184
|
-
SELECT * FROM orders
|
|
185
|
-
QUALIFY ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) = 1;
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### PIVOT / UNPIVOT
|
|
189
|
-
|
|
190
|
-
```sql
|
|
191
|
-
-- Snowflake:原生支持
|
|
192
|
-
SELECT * FROM sales
|
|
193
|
-
PIVOT (SUM(amount) FOR month IN ('Jan', 'Feb', 'Mar'));
|
|
194
|
-
|
|
195
|
-
-- ClickZetta:用 CASE WHEN
|
|
196
|
-
SELECT product,
|
|
197
|
-
SUM(CASE WHEN month = 'Jan' THEN amount END) AS Jan,
|
|
198
|
-
SUM(CASE WHEN month = 'Feb' THEN amount END) AS Feb
|
|
199
|
-
FROM sales GROUP BY product;
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### LATERAL FLATTEN → LATERAL VIEW EXPLODE
|
|
203
|
-
|
|
204
|
-
```sql
|
|
205
|
-
-- Snowflake:LATERAL FLATTEN
|
|
206
|
-
SELECT f.value::STRING AS skill
|
|
207
|
-
FROM employees, LATERAL FLATTEN(input => skills) f;
|
|
208
|
-
|
|
209
|
-
-- ClickZetta:LATERAL VIEW EXPLODE
|
|
210
|
-
SELECT skill
|
|
211
|
-
FROM employees
|
|
212
|
-
LATERAL VIEW EXPLODE(skills) lv AS skill;
|
|
213
|
-
|
|
214
|
-
-- 带位置索引
|
|
215
|
-
SELECT pos, skill
|
|
216
|
-
FROM employees
|
|
217
|
-
LATERAL VIEW POSEXPLODE(skills) lv AS pos, skill;
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### JSON 访问语法
|
|
221
|
-
|
|
222
|
-
```sql
|
|
223
|
-
-- Snowflake:冒号语法
|
|
224
|
-
SELECT data:address:city AS city FROM users;
|
|
225
|
-
SELECT data[0]:name AS name FROM users;
|
|
226
|
-
SELECT data:scores[2] AS score FROM users;
|
|
227
|
-
|
|
228
|
-
-- ClickZetta:方括号语法
|
|
229
|
-
SELECT data['address']['city'] AS city FROM users;
|
|
230
|
-
SELECT data['phoneNumbers'][0]['name'] AS name FROM users;
|
|
231
|
-
SELECT data['scores'][2] AS score FROM users;
|
|
232
|
-
|
|
233
|
-
-- 类型转换
|
|
234
|
-
-- Snowflake: data:age::INT
|
|
235
|
-
-- ClickZetta: CAST(data['age'] AS INT)
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### OBJECT_CONSTRUCT / ARRAY_CONSTRUCT
|
|
239
|
-
|
|
240
|
-
```sql
|
|
241
|
-
-- Snowflake
|
|
242
|
-
SELECT OBJECT_CONSTRUCT('name', 'Alice', 'age', 30) AS obj;
|
|
243
|
-
SELECT ARRAY_CONSTRUCT(1, 2, 3) AS arr;
|
|
244
|
-
|
|
245
|
-
-- ClickZetta
|
|
246
|
-
SELECT MAP('name', 'Alice') AS obj; -- 简单 MAP
|
|
247
|
-
SELECT named_struct('id', 1, 'name', 'Alice') AS person; -- ✅ 命名字段用 named_struct
|
|
248
|
-
SELECT STRUCT(1, 'Alice') AS person; -- 位置参数写法
|
|
249
|
-
SELECT ARRAY(1, 2, 3) AS arr; -- ARRAY_CONSTRUCT → ARRAY()
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
### ASOF JOIN / MATCH_RECOGNIZE
|
|
253
|
-
|
|
254
|
-
```sql
|
|
255
|
-
-- ❌ ClickZetta 不支持
|
|
256
|
-
SELECT * FROM t1 ASOF JOIN t2 ON t1.id = t2.id;
|
|
257
|
-
SELECT * FROM t MATCH_RECOGNIZE (...);
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## 函数差异
|
|
263
|
-
|
|
264
|
-
### 日期函数
|
|
265
|
-
|
|
266
|
-
```sql
|
|
267
|
-
-- Snowflake → ClickZetta
|
|
268
|
-
DATEADD(day, 7, dt) → DATEADD(day, 7, dt) ✅ 相同;也可用 DATE_ADD(dt, 7)
|
|
269
|
-
DATEDIFF(day, start, end) → DATEDIFF(end, start) ⚠️ 参数顺序相反!
|
|
270
|
-
DATE_TRUNC('month', dt) → DATE_TRUNC('month', dt) 相同
|
|
271
|
-
TO_DATE('2024-01-01') → TO_DATE('2024-01-01') 相同
|
|
272
|
-
CONVERT_TIMEZONE(tz, dt) → CONVERT_TZ(dt, from_tz, to_tz)
|
|
273
|
-
SYSDATE() / GETDATE() → CURRENT_TIMESTAMP() / NOW()
|
|
274
|
-
LAST_DAY(dt) → LAST_DAY(dt) 相同
|
|
275
|
-
YEAR(dt) / MONTH(dt) → YEAR(dt) / MONTH(dt) 相同
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### 字符串函数
|
|
279
|
-
|
|
280
|
-
```sql
|
|
281
|
-
-- Snowflake → ClickZetta
|
|
282
|
-
CHARINDEX(sub, s) → INSTR(s, sub) ⚠️ 参数顺序相反!
|
|
283
|
-
EDITDISTANCE(s1, s2) → LEVENSHTEIN(s1, s2)
|
|
284
|
-
STRTOK(s, delim, n) → SPLIT_PART(s, delim, n)
|
|
285
|
-
ILIKE(s, pattern) → ILIKE(s, pattern) ✅ ClickZetta 也支持!
|
|
286
|
-
CONTAINS(s, sub) → INSTR(s, sub) > 0
|
|
287
|
-
STARTSWITH(s, prefix) → s LIKE 'prefix%'
|
|
288
|
-
ENDSWITH(s, suffix) → s LIKE '%suffix'
|
|
289
|
-
INITCAP(s) → INITCAP(s) 相同
|
|
290
|
-
REGEXP_LIKE(s, p) → RLIKE(s, p) 或 s RLIKE p
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
### 聚合函数
|
|
294
|
-
|
|
295
|
-
```sql
|
|
296
|
-
-- Snowflake → ClickZetta
|
|
297
|
-
LISTAGG(col, ',') WITHIN GROUP (ORDER BY col) → GROUP_CONCAT(col ORDER BY col SEPARATOR ',')
|
|
298
|
-
ARRAY_AGG(col) WITHIN GROUP (ORDER BY col) → ARRAY_AGG(col) ⚠️ 不支持 WITHIN GROUP
|
|
299
|
-
OBJECT_AGG(key, value) → MAP_AGG(key, value)
|
|
300
|
-
APPROX_COUNT_DISTINCT(col) → APPROX_COUNT_DISTINCT(col) 相同
|
|
301
|
-
MEDIAN(col) → MEDIAN(col) 相同
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### 条件函数
|
|
305
|
-
|
|
306
|
-
```sql
|
|
307
|
-
-- Snowflake → ClickZetta
|
|
308
|
-
IFF(cond, a, b) → IF(cond, a, b)
|
|
309
|
-
ZEROIFNULL(x) → COALESCE(x, 0) 或 NVL(x, 0)
|
|
310
|
-
NULLIFZERO(x) → NULLIF(x, 0)
|
|
311
|
-
DECODE(expr, v1, r1, ...) → DECODE(expr, v1, r1, ...) 相同
|
|
312
|
-
BOOLAND(a, b) → a AND b
|
|
313
|
-
BOOLOR(a, b) → a OR b
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
---
|
|
317
|
-
|
|
318
|
-
## Stream 元数据字段
|
|
319
|
-
|
|
320
|
-
```sql
|
|
321
|
-
-- Snowflake Stream
|
|
322
|
-
METADATA$ACTION -- 'INSERT' / 'DELETE'
|
|
323
|
-
METADATA$ISUPDATE -- TRUE/FALSE(UPDATE 会产生一对 DELETE+INSERT)
|
|
324
|
-
METADATA$ROW_ID -- 行唯一标识
|
|
325
|
-
|
|
326
|
-
-- ClickZetta Table Stream
|
|
327
|
-
__change_type -- 'INSERT' / 'UPDATE_BEFORE' / 'UPDATE_AFTER' / 'DELETE'
|
|
328
|
-
__commit_version -- 提交版本号
|
|
329
|
-
__commit_timestamp -- 提交时间戳
|
|
330
|
-
|
|
331
|
-
-- 消费 Stream 的 MERGE 写法
|
|
332
|
-
-- Snowflake
|
|
333
|
-
MERGE INTO target t USING stream s ON t.id = s.id
|
|
334
|
-
WHEN MATCHED AND s.METADATA$ACTION = 'DELETE' THEN DELETE
|
|
335
|
-
WHEN MATCHED THEN UPDATE SET ...
|
|
336
|
-
WHEN NOT MATCHED AND s.METADATA$ACTION = 'INSERT' THEN INSERT ...;
|
|
337
|
-
|
|
338
|
-
-- ClickZetta
|
|
339
|
-
MERGE INTO target t USING stream s ON t.id = s.id
|
|
340
|
-
WHEN MATCHED AND s.__change_type = 'UPDATE_AFTER' THEN UPDATE SET ...
|
|
341
|
-
WHEN MATCHED AND s.__change_type = 'DELETE' THEN DELETE
|
|
342
|
-
WHEN NOT MATCHED AND s.__change_type = 'INSERT' THEN INSERT ...;
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
## Dynamic Table 差异
|
|
348
|
-
|
|
349
|
-
```sql
|
|
350
|
-
-- Snowflake
|
|
351
|
-
CREATE DYNAMIC TABLE product_sales
|
|
352
|
-
TARGET_LAG = '1 minutes'
|
|
353
|
-
WAREHOUSE = my_warehouse
|
|
354
|
-
AS SELECT ...;
|
|
355
|
-
|
|
356
|
-
-- ClickZetta(不支持 TARGET_LAG)
|
|
357
|
-
CREATE DYNAMIC TABLE product_sales
|
|
358
|
-
REFRESH INTERVAL 1 MINUTE VCLUSTER default_ap
|
|
359
|
-
AS SELECT ...;
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
## 已验证的兼容性(Snowflake 有,ClickZetta 也有)
|
|
365
|
-
|
|
366
|
-
- `SEMI JOIN` / `ANTI JOIN` ✅
|
|
367
|
-
- `QUALIFY` ✅(ClickZetta 也支持)
|
|
368
|
-
- `ILIKE` ✅(ClickZetta 也支持)
|
|
369
|
-
- `DATEADD` ✅(ClickZetta 也支持)
|
|
370
|
-
- `MINUS`(等价于 EXCEPT)✅
|
|
371
|
-
- `DECODE` ✅
|
|
372
|
-
- `INITCAP` ✅
|
|
373
|
-
- `MEDIAN` ✅
|
|
374
|
-
- `APPROX_COUNT_DISTINCT` ✅
|
|
375
|
-
- `TRY_CAST` ✅
|
|
376
|
-
- `NULLIF` / `COALESCE` / `NVL` ✅
|
|
377
|
-
- `GROUPING SETS` / `ROLLUP` / `CUBE` ✅
|
|
378
|
-
- `WITH CTE` ✅
|
|
379
|
-
- `REGEXP_LIKE` / `RLIKE` ✅
|
|
380
|
-
- `SPLIT_PART` ✅
|
|
381
|
-
- `LAST_DAY` ✅
|
|
382
|
-
- `IDENTITY` 列(替代 AUTOINCREMENT/SEQUENCE)✅
|