@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,279 +0,0 @@
|
|
|
1
|
-
# DML 完整语法参考
|
|
2
|
-
|
|
3
|
-
> 基于 ClickZetta Lakehouse 产品文档整理,含与 Snowflake / Spark SQL 的差异标注
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## ⚠️ 隐式类型转换规则(INSERT / UPDATE 通用)
|
|
8
|
-
|
|
9
|
-
**ClickZetta 对写入操作(INSERT/UPDATE)严格禁止隐式类型转换,必须显式 CAST。**
|
|
10
|
-
但 SELECT/WHERE/表达式中允许隐式转换。
|
|
11
|
-
|
|
12
|
-
### 完整规则表(已验证)
|
|
13
|
-
|
|
14
|
-
| 目标列类型 | 写入值 | INSERT/UPDATE | WHERE/SELECT |
|
|
15
|
-
|---|---|---|---|
|
|
16
|
-
| `DATE` | `'2024-01-15'`(字符串) | ❌ 报错 | ✅ 允许 |
|
|
17
|
-
| `TIMESTAMP` | `'2024-01-15 12:00:00'`(字符串) | ❌ 报错 | ✅ 允许 |
|
|
18
|
-
| `BOOLEAN` | `'true'` / `'false'`(字符串) | ❌ 报错 | ✅ 允许 |
|
|
19
|
-
| `BOOLEAN` | `1` / `0`(整数) | ❌ 报错 | ✅ 允许 |
|
|
20
|
-
| `JSON` | `'{"k":1}'`(字符串) | ❌ 报错 | ✅ 允许 |
|
|
21
|
-
| `INT` / `BIGINT` | `'123'`(字符串) | ❌ 报错 | ✅ 允许 |
|
|
22
|
-
| `BIGINT` | `100`(INT) | ✅ 允许 | ✅ 允许 |
|
|
23
|
-
| `DOUBLE` | `1.5`(FLOAT) | ✅ 允许 | ✅ 允许 |
|
|
24
|
-
| `BIGINT` | `1.5`(FLOAT) | ✅ 允许(截断) | ✅ 允许 |
|
|
25
|
-
|
|
26
|
-
### 各类型正确写法
|
|
27
|
-
|
|
28
|
-
```sql
|
|
29
|
-
-- DATE(以下写法等价)
|
|
30
|
-
INSERT INTO t VALUES (CAST('2024-01-15' AS DATE));
|
|
31
|
-
INSERT INTO t VALUES (DATE '2024-01-15');
|
|
32
|
-
INSERT INTO t VALUES (TO_DATE('2024-01-15'));
|
|
33
|
-
INSERT INTO t VALUES (DATE('2024-01-15')); -- 函数形式,也支持
|
|
34
|
-
|
|
35
|
-
-- TIMESTAMP(以下写法等价)
|
|
36
|
-
INSERT INTO t VALUES (CAST('2024-01-15 12:00:00' AS TIMESTAMP));
|
|
37
|
-
INSERT INTO t VALUES (TIMESTAMP '2024-01-15 12:00:00');
|
|
38
|
-
INSERT INTO t VALUES (TO_TIMESTAMP('2024-01-15 12:00:00'));
|
|
39
|
-
INSERT INTO t VALUES (TIMESTAMP('2024-01-15 12:00:00')); -- 函数形式,也支持
|
|
40
|
-
INSERT INTO t VALUES (CURRENT_TIMESTAMP());
|
|
41
|
-
INSERT INTO t VALUES (CURRENT_DATE() - INTERVAL 7 DAY);
|
|
42
|
-
|
|
43
|
-
-- BOOLEAN(只接受 TRUE/FALSE 字面量或 CAST)
|
|
44
|
-
INSERT INTO t VALUES (TRUE);
|
|
45
|
-
INSERT INTO t VALUES (FALSE);
|
|
46
|
-
INSERT INTO t VALUES (CAST(1 AS BOOLEAN));
|
|
47
|
-
INSERT INTO t VALUES (CAST('true' AS BOOLEAN));
|
|
48
|
-
|
|
49
|
-
-- JSON(必须用 PARSE_JSON 或 CAST)
|
|
50
|
-
INSERT INTO t VALUES (PARSE_JSON('{"key":"value"}'));
|
|
51
|
-
INSERT INTO t VALUES (CAST('{"key":"value"}' AS JSON));
|
|
52
|
-
|
|
53
|
-
-- INT/BIGINT(字符串必须 CAST)
|
|
54
|
-
INSERT INTO t VALUES (CAST('123' AS INT));
|
|
55
|
-
INSERT INTO t VALUES (CAST('456' AS BIGINT));
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### UPDATE 同样适用
|
|
59
|
-
|
|
60
|
-
```sql
|
|
61
|
-
-- ❌ UPDATE 也不允许字符串隐式转换
|
|
62
|
-
UPDATE orders SET dt = '2024-06-01' WHERE id = 1; -- 报错
|
|
63
|
-
UPDATE orders SET flag = 0 WHERE id = 1; -- 报错
|
|
64
|
-
|
|
65
|
-
-- ✅ 必须显式转换
|
|
66
|
-
UPDATE orders SET dt = CAST('2024-06-01' AS DATE) WHERE id = 1;
|
|
67
|
-
UPDATE orders SET flag = CAST(0 AS BOOLEAN) WHERE id = 1;
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### WHERE 中字符串可以隐式比较
|
|
71
|
-
|
|
72
|
-
```sql
|
|
73
|
-
-- ✅ WHERE 中允许字符串与日期/数字比较
|
|
74
|
-
SELECT * FROM orders WHERE dt = '2024-01-15';
|
|
75
|
-
SELECT * FROM orders WHERE dt >= '2024-01-01' AND dt < '2025-01-01';
|
|
76
|
-
SELECT * FROM orders WHERE id = '123';
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
**与 Snowflake / Spark 差异:**
|
|
80
|
-
- Snowflake / Spark:INSERT/UPDATE 时字符串可隐式转为日期/布尔/数字类型
|
|
81
|
-
- ClickZetta:写入时**必须显式转换**,查询时可隐式比较
|
|
82
|
-
|
|
83
|
-
> **同样适用于 RESTORE TABLE**:`RESTORE TABLE t TO TIMESTAMP AS OF '2024-01-15'` 会报错,必须用 `CAST('2024-01-15 10:00:00' AS TIMESTAMP)` 或完整毫秒时间戳字符串。
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## INSERT
|
|
88
|
-
|
|
89
|
-
```sql
|
|
90
|
-
-- 追加(单行)
|
|
91
|
-
INSERT INTO orders VALUES (1, 101, 100.0, 'pending');
|
|
92
|
-
INSERT INTO orders (id, customer_id, amount) VALUES (1, 101, 100.0);
|
|
93
|
-
|
|
94
|
-
-- 追加(多行)
|
|
95
|
-
INSERT INTO orders VALUES
|
|
96
|
-
(1, 101, 100.0, 'pending'),
|
|
97
|
-
(2, 102, 200.0, 'completed');
|
|
98
|
-
|
|
99
|
-
-- 从查询追加
|
|
100
|
-
INSERT INTO orders SELECT * FROM staging_orders WHERE status = 'new';
|
|
101
|
-
|
|
102
|
-
-- 覆盖整表
|
|
103
|
-
INSERT OVERWRITE TABLE orders SELECT * FROM new_orders;
|
|
104
|
-
|
|
105
|
-
-- 覆盖指定分区(静态分区)
|
|
106
|
-
INSERT OVERWRITE TABLE orders PARTITION (dt = '2024-01-01')
|
|
107
|
-
SELECT id, amount FROM staging WHERE dt = '2024-01-01';
|
|
108
|
-
|
|
109
|
-
-- 动态分区(自动根据数据值分区)
|
|
110
|
-
INSERT INTO orders PARTITION (dt)
|
|
111
|
-
SELECT id, amount, dt FROM staging;
|
|
112
|
-
|
|
113
|
-
-- 不推荐大量数据用 VALUES,适合测试
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
**与 Snowflake 差异:**
|
|
117
|
-
- Snowflake 无 `INSERT OVERWRITE`;用 `TRUNCATE` + `INSERT` 或 `MERGE` 替代
|
|
118
|
-
- Snowflake 无 `PARTITION` 子句(Snowflake 用 CLUSTER BY 自动管理)
|
|
119
|
-
- ClickZetta 支持 Hive 风格动态分区
|
|
120
|
-
|
|
121
|
-
**与 Spark SQL 差异:**
|
|
122
|
-
- 语法基本相同,ClickZetta 完全兼容 Spark INSERT 语法
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## UPDATE
|
|
127
|
-
|
|
128
|
-
```sql
|
|
129
|
-
-- 基本更新
|
|
130
|
-
UPDATE orders SET status = 'cancelled' WHERE id = 123;
|
|
131
|
-
|
|
132
|
-
-- 多列更新
|
|
133
|
-
UPDATE orders
|
|
134
|
-
SET status = 'completed', updated_at = current_timestamp()
|
|
135
|
-
WHERE id = 123;
|
|
136
|
-
|
|
137
|
-
-- 子查询更新
|
|
138
|
-
UPDATE orders
|
|
139
|
-
SET amount = amount * 1.1
|
|
140
|
-
WHERE customer_id IN (
|
|
141
|
-
SELECT id FROM customers WHERE tier = 'VIP'
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
-- 带 ORDER BY + LIMIT(分批更新)
|
|
145
|
-
UPDATE orders
|
|
146
|
-
SET status = 'archived'
|
|
147
|
-
WHERE created_at < '2020-01-01'
|
|
148
|
-
ORDER BY created_at ASC
|
|
149
|
-
LIMIT 10000;
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
**与 Snowflake 差异:**
|
|
153
|
-
- Snowflake `UPDATE ... FROM` 语法(JOIN 更新)→ ClickZetta 用子查询替代
|
|
154
|
-
- ClickZetta 额外支持 `ORDER BY + LIMIT`(Snowflake 不支持)
|
|
155
|
-
|
|
156
|
-
**与 Spark SQL 差异:**
|
|
157
|
-
- Spark SQL 不支持 `UPDATE`(Delta Lake 支持);ClickZetta 原生支持
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## DELETE
|
|
162
|
-
|
|
163
|
-
```sql
|
|
164
|
-
-- 基本删除
|
|
165
|
-
DELETE FROM orders WHERE id = 123;
|
|
166
|
-
|
|
167
|
-
-- 条件删除
|
|
168
|
-
DELETE FROM orders WHERE created_at < '2020-01-01';
|
|
169
|
-
|
|
170
|
-
-- 子查询删除
|
|
171
|
-
DELETE FROM orders
|
|
172
|
-
WHERE order_id IN (
|
|
173
|
-
SELECT order_id FROM order_details WHERE status = 'cancelled'
|
|
174
|
-
);
|
|
175
|
-
|
|
176
|
-
-- 删除所有行(等价于 TRUNCATE,但会记录版本)
|
|
177
|
-
DELETE FROM orders WHERE 1 = 1;
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**与 Snowflake 差异:**
|
|
181
|
-
- 语法基本相同
|
|
182
|
-
|
|
183
|
-
**与 Spark SQL 差异:**
|
|
184
|
-
- Spark SQL 不支持 `DELETE`(Delta Lake 支持);ClickZetta 原生支持
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## MERGE INTO(UPSERT)
|
|
189
|
-
|
|
190
|
-
```sql
|
|
191
|
-
-- 标准 MERGE(⚠️ 多个 WHEN MATCHED 时,UPDATE 必须在 DELETE 之前)
|
|
192
|
-
MERGE INTO target t
|
|
193
|
-
USING source s ON t.id = s.id
|
|
194
|
-
WHEN MATCHED AND s.is_deleted = 0 THEN UPDATE SET -- UPDATE 在前
|
|
195
|
-
t.amount = s.amount,
|
|
196
|
-
t.status = s.status,
|
|
197
|
-
t.updated_at = current_timestamp()
|
|
198
|
-
WHEN MATCHED AND s.is_deleted = 1 THEN DELETE -- DELETE 在后
|
|
199
|
-
WHEN NOT MATCHED THEN INSERT (id, amount, status, created_at)
|
|
200
|
-
VALUES (s.id, s.amount, s.status, current_timestamp());
|
|
201
|
-
|
|
202
|
-
-- 多个 WHEN MATCHED(UPDATE 必须在 DELETE 前)
|
|
203
|
-
MERGE INTO target t
|
|
204
|
-
USING source s ON t.id = s.id
|
|
205
|
-
WHEN MATCHED AND s.action = 'update' THEN UPDATE SET t.amount = s.amount
|
|
206
|
-
WHEN MATCHED AND s.action = 'delete' THEN DELETE
|
|
207
|
-
WHEN NOT MATCHED THEN INSERT VALUES (s.id, s.amount);
|
|
208
|
-
|
|
209
|
-
-- 从子查询 MERGE
|
|
210
|
-
MERGE INTO orders t
|
|
211
|
-
USING (
|
|
212
|
-
SELECT id, SUM(amount) AS total FROM line_items GROUP BY id
|
|
213
|
-
) s ON t.id = s.id
|
|
214
|
-
WHEN MATCHED THEN UPDATE SET t.total = s.total
|
|
215
|
-
WHEN NOT MATCHED THEN INSERT (id, total) VALUES (s.id, s.total);
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
**⚠️ ClickZetta MERGE 限制:**
|
|
219
|
-
1. `WHEN NOT MATCHED` 只能有**一个**(Snowflake 支持多个)
|
|
220
|
-
2. 多个 `WHEN MATCHED` 时,`UPDATE` 必须在 `DELETE` 之前
|
|
221
|
-
3. 一个源行不能匹配多个目标行(否则报错)
|
|
222
|
-
|
|
223
|
-
**与 Snowflake 差异:**
|
|
224
|
-
- Snowflake 支持多个 `WHEN NOT MATCHED`;ClickZetta 只支持一个
|
|
225
|
-
- Snowflake `MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE`;ClickZetta 不支持
|
|
226
|
-
- 语法结构基本相同
|
|
227
|
-
|
|
228
|
-
**与 Spark SQL 差异:**
|
|
229
|
-
- Spark SQL(Delta Lake)支持 `WHEN NOT MATCHED BY SOURCE`;ClickZetta 不支持
|
|
230
|
-
- 语法结构基本相同
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## COPY INTO(批量导入/导出)
|
|
235
|
-
|
|
236
|
-
```sql
|
|
237
|
-
-- 从 Volume 导入
|
|
238
|
-
COPY INTO orders
|
|
239
|
-
FROM VOLUME my_oss_volume
|
|
240
|
-
USING CSV
|
|
241
|
-
OPTIONS('header' = 'true', 'sep' = ',')
|
|
242
|
-
SUBDIRECTORY 'data/2024/';
|
|
243
|
-
|
|
244
|
-
-- 从 Volume 导入(Parquet)
|
|
245
|
-
COPY INTO orders
|
|
246
|
-
FROM VOLUME my_oss_volume
|
|
247
|
-
USING PARQUET
|
|
248
|
-
FILES('part-00001.parquet', 'part-00002.parquet');
|
|
249
|
-
|
|
250
|
-
-- 正则匹配文件
|
|
251
|
-
COPY INTO orders
|
|
252
|
-
FROM VOLUME my_oss_volume
|
|
253
|
-
USING PARQUET
|
|
254
|
-
REGEXP '.*2024-0[1-6].parquet';
|
|
255
|
-
|
|
256
|
-
-- 覆盖导入
|
|
257
|
-
COPY OVERWRITE INTO orders
|
|
258
|
-
FROM VOLUME my_oss_volume
|
|
259
|
-
USING CSV OPTIONS('header' = 'true');
|
|
260
|
-
|
|
261
|
-
-- 导出到 Volume
|
|
262
|
-
COPY INTO VOLUME my_oss_volume
|
|
263
|
-
SUBDIRECTORY 'export/orders/'
|
|
264
|
-
FROM orders
|
|
265
|
-
USING PARQUET;
|
|
266
|
-
|
|
267
|
-
-- 导出查询结果
|
|
268
|
-
COPY INTO VOLUME my_oss_volume
|
|
269
|
-
SUBDIRECTORY 'export/2024/'
|
|
270
|
-
FROM (SELECT * FROM orders WHERE YEAR(created_at) = 2024)
|
|
271
|
-
USING CSV OPTIONS('header' = 'true');
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
**与 Snowflake 差异:**
|
|
275
|
-
- Snowflake `COPY INTO t FROM @stage/path/file.csv` → ClickZetta `COPY INTO t FROM VOLUME v USING CSV`
|
|
276
|
-
- Snowflake Stage 用 `@` 前缀;ClickZetta Volume 用对象名
|
|
277
|
-
- Snowflake `COPY INTO @stage FROM t` → ClickZetta `COPY INTO VOLUME v FROM t`
|
|
278
|
-
- Snowflake 支持 `PATTERN = '.*\.csv'`;ClickZetta 用 `REGEXP`
|
|
279
|
-
- Snowflake `FILE_FORMAT = (TYPE = CSV)` → ClickZetta `USING CSV OPTIONS(...)`
|