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