@clickzetta/cz-cli-darwin-arm64 0.3.19 → 0.3.21

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.
Files changed (40) hide show
  1. package/bin/cz-cli +0 -0
  2. package/bin/skills/clickzetta-access-control/eval_cases.jsonl +1 -1
  3. package/bin/skills/clickzetta-batch-sync-pipeline/eval_cases.jsonl +5 -0
  4. package/bin/skills/clickzetta-cdc-sync-pipeline/eval_cases.jsonl +5 -0
  5. package/bin/skills/clickzetta-dba-guide/SKILL.md +542 -0
  6. package/bin/skills/clickzetta-dba-guide/eval_cases.jsonl +3 -0
  7. package/bin/skills/clickzetta-dw-modeling/eval_cases.jsonl +1 -1
  8. package/bin/skills/clickzetta-dynamic-table/eval_cases.jsonl +5 -0
  9. package/bin/skills/clickzetta-file-import-pipeline/eval_cases.jsonl +5 -0
  10. package/bin/skills/clickzetta-lakehouse-connect/SKILL.md +218 -0
  11. package/bin/skills/clickzetta-lakehouse-connect/eval_cases.jsonl +3 -0
  12. package/bin/skills/clickzetta-lakehouse-connect/evals/evals.json +35 -0
  13. package/bin/skills/clickzetta-lakehouse-connect/references/config-file.md +435 -0
  14. package/bin/skills/clickzetta-lakehouse-connect/references/jdbc.md +478 -0
  15. package/bin/skills/clickzetta-lakehouse-connect/references/python-sdk.md +225 -0
  16. package/bin/skills/clickzetta-lakehouse-connect/references/sqlalchemy.md +468 -0
  17. package/bin/skills/clickzetta-lakehouse-connect/references/zettapark-session.md +445 -0
  18. package/bin/skills/clickzetta-manage-comments/SKILL.md +219 -0
  19. package/bin/skills/clickzetta-manage-comments/eval_cases.jsonl +3 -0
  20. package/bin/skills/clickzetta-metadata/SKILL.md +483 -0
  21. package/bin/skills/clickzetta-metadata/eval_cases.jsonl +5 -0
  22. package/bin/skills/clickzetta-metadata/references/instance-views-reference.md +276 -0
  23. package/bin/skills/clickzetta-metadata/references/metering-views-reference.md +137 -0
  24. package/bin/skills/clickzetta-metadata/references/show-desc-reference.md +326 -0
  25. package/bin/skills/clickzetta-metadata/references/views-reference.md +271 -0
  26. package/bin/skills/clickzetta-oss-ingest-pipeline/eval_cases.jsonl +5 -0
  27. package/bin/skills/clickzetta-overview/SKILL.md +102 -0
  28. package/bin/skills/clickzetta-overview/eval_cases.jsonl +5 -0
  29. package/bin/skills/clickzetta-overview/references/brands-and-endpoints.md +79 -0
  30. package/bin/skills/clickzetta-overview/references/object-model.md +311 -0
  31. package/bin/skills/clickzetta-overview/references/studio-modules.md +173 -0
  32. package/bin/skills/clickzetta-realtime-sync-pipeline/eval_cases.jsonl +5 -0
  33. package/bin/skills/clickzetta-sql-pipeline-manager/eval_cases.jsonl +12 -0
  34. package/bin/skills/clickzetta-table-stream-pipeline/eval_cases.jsonl +5 -0
  35. package/bin/skills/clickzetta-vcluster-manager/eval_cases.jsonl +5 -0
  36. package/bin/skills/clickzetta-volume-manager/eval_cases.jsonl +5 -0
  37. package/bin/skills/cz-cli-inner/SKILL.md +5 -4
  38. package/package.json +1 -1
  39. package/bin/skills/clickzetta-data-ingest-pipeline/SKILL.md +0 -220
  40. package/bin/skills/clickzetta-data-ingest-pipeline/eval_cases.jsonl +0 -5
@@ -0,0 +1,478 @@
1
+ # JDBC 连接详细参考
2
+
3
+ > **驱动包名**: `clickzetta-java`
4
+ > **Driver 类**: `com.clickzetta.client.jdbc.ClickZettaDriver`
5
+ > **返回**: [ClickZetta 连接主指南](../SKILL.md) §4.4
6
+
7
+ ---
8
+
9
+ ## 目录
10
+
11
+ 1. [JDK 环境要求](#1-jdk-环境要求)
12
+ 2. [获取驱动](#2-获取驱动)
13
+ 3. [JDBC URL 格式](#3-jdbc-url-格式)
14
+ 4. [Driver 类名](#4-driver-类名)
15
+ 5. [Java 代码完整示例](#5-java-代码完整示例)
16
+ 6. [Properties 文件格式](#6-properties-文件格式)
17
+ 7. [SQLLine 使用方法](#7-sqlline-使用方法)
18
+ 8. [BI 工具集成](#8-bi-工具集成)
19
+ 9. [适用场景](#9-适用场景)
20
+ 10. [Spring Boot 集成示例](#10-spring-boot-集成示例)
21
+ 11. [常见问题](#11-常见问题)
22
+ 12. [与其他连接方式对比](#12-与其他连接方式对比)
23
+ 13. [交叉引用](#13-交叉引用)
24
+
25
+ ---
26
+
27
+ ## 1. JDK 环境要求
28
+
29
+ | JDK 版本 | 支持情况 | 额外要求 |
30
+ |----------|---------|---------|
31
+ | JDK 8 | ✅ 完全支持 | 无 |
32
+ | JDK 9+ | ✅ 支持 | 需添加 `--add-opens` JVM 参数 |
33
+
34
+ ### JDK 9+ 模块系统参数
35
+
36
+ JDK 9 引入了模块系统(JPMS),ClickZetta JDBC 驱动需要访问 `java.base/java.nio` 内部 API。
37
+ 必须在启动时添加以下 JVM 参数:
38
+
39
+ ```bash
40
+ java --add-opens=java.base/java.nio=ALL-UNNAMED \
41
+ -cp "your-classpath/*" your.MainClass
42
+ ```
43
+
44
+ > **来源**:`sqlline_cz/sqlline` 脚本中的实际判断逻辑:
45
+ > ```bash
46
+ > JAVA_VERSION=$($JAVA_HOME/bin/java -version 2>&1 | head -n 1 | cut -d '"' -f 2 | cut -d '.' -f 1-2)
47
+ > if (( $(echo "$JAVA_VERSION > 1.8" | bc -l) )); then
48
+ > JAVA_OPTS="--add-opens=java.base/java.nio=ALL-UNNAMED"
49
+ > fi
50
+ > ```
51
+
52
+ ---
53
+
54
+ ## 2. 获取驱动
55
+
56
+ ### 2.1 Maven 依赖
57
+
58
+ ```xml
59
+ <dependency>
60
+ <groupId>com.clickzetta</groupId>
61
+ <artifactId>clickzetta-java</artifactId>
62
+ <version>最新版本</version>
63
+ </dependency>
64
+ ```
65
+
66
+ ### 2.2 直接下载 JAR
67
+
68
+ ```bash
69
+ # 下载最新 shaded JAR(含所有依赖)
70
+ wget https://autolake-dev-beijing.oss-cn-beijing.aliyuncs.com/clickzetta-tool/release/clickzetta-java-latest-jar-with-dependencies.jar
71
+ ```
72
+
73
+ > **来源**:`sqlline_cz/setup.sh` 中的实际下载地址。
74
+
75
+ ---
76
+
77
+ ## 3. JDBC URL 格式
78
+
79
+ ### 3.1 标准格式(通过 API 网关)
80
+
81
+ ```
82
+ jdbc:clickzetta://<instance>.<service>/<workspace>?virtualCluster=<vcluster>&schema=<schema>
83
+ ```
84
+
85
+ | 组成部分 | 说明 | 示例 |
86
+ |---------|------|------|
87
+ | `<instance>` | 实例 ID | `your_instance` |
88
+ | `<service>` | 服务地址(含区域前缀) | `cn-shanghai-alicloud.api.clickzetta.com` |
89
+ | `<workspace>` | 工作空间名 | `your_workspace` |
90
+ | `virtualCluster` | 虚拟集群名 | `default_ap` |
91
+ | `schema` | Schema 名 | `public` |
92
+
93
+ **完整示例**:
94
+
95
+ ```
96
+ jdbc:clickzetta://your_instance.cn-shanghai-alicloud.api.clickzetta.com/your_workspace?virtualCluster=default_ap&schema=public
97
+ ```
98
+
99
+ > **来源**:`sqlline_cz/clickzetta.properties` 中的实际 URL。
100
+
101
+ ### 3.2 直连格式(Direct Service)
102
+
103
+ 用于直接连接服务端口,跳过 API 网关:
104
+
105
+ ```
106
+ jdbc:clickzetta://<host>:<port>/<workspace>?schema=<schema>&vcluster=<vcluster>&access_mode=direct_service
107
+ ```
108
+
109
+ **完整示例**:
110
+
111
+ ```
112
+ jdbc:clickzetta://21.47.94.153.204:8523/ql_test21_workspace?schema=ql_test21_schema&vcluster=cz_gp_ql_test21&access_mode=direct_service
113
+ ```
114
+
115
+ > **来源**:`sqlline_cz/cz_perf_ql_21.properties` 中的实际配置。
116
+
117
+ ### 3.3 URL 参数对照表
118
+
119
+ | 参数 | 标准模式 | 直连模式 | 说明 |
120
+ |------|---------|---------|------|
121
+ | `virtualCluster` | ✅ 使用 | — | 虚拟集群(标准模式参数名) |
122
+ | `vcluster` | — | ✅ 使用 | 虚拟集群(直连模式参数名) |
123
+ | `schema` | ✅ | ✅ | 目标 Schema |
124
+ | `access_mode` | 不需要 | `direct_service` | 连接模式 |
125
+
126
+ > ⚠️ **注意**:标准模式中虚拟集群参数名为 `virtualCluster`(驼峰命名),
127
+ > 直连模式中为 `vcluster`。与 Python SDK 的 `virtual_cluster` 均不同。
128
+
129
+ ---
130
+
131
+ ## 4. Driver 类名
132
+
133
+ ```
134
+ com.clickzetta.client.jdbc.ClickZettaDriver
135
+ ```
136
+
137
+ 在代码中加载驱动:
138
+
139
+ ```java
140
+ Class.forName("com.clickzetta.client.jdbc.ClickZettaDriver");
141
+ ```
142
+
143
+ > 现代 JDBC 4.0+ 驱动支持自动发现(通过 `META-INF/services/java.sql.Driver`),
144
+ > 但显式加载可以确保兼容性。
145
+
146
+ ---
147
+
148
+ ## 5. Java 代码完整示例
149
+
150
+ ### 5.1 基本查询
151
+
152
+ ```java
153
+ import java.sql.*;
154
+
155
+ public class ClickZettaJDBCExample {
156
+ public static void main(String[] args) throws Exception {
157
+ String url = "jdbc:clickzetta://your_instance.cn-shanghai-alicloud.api.clickzetta.com"
158
+ + "/my_workspace"
159
+ + "?virtualCluster=default_ap&schema=public";
160
+ String user = "my_user";
161
+ String password = "my_password";
162
+
163
+ // 加载驱动
164
+ Class.forName("com.clickzetta.client.jdbc.ClickZettaDriver");
165
+
166
+ try (Connection conn = DriverManager.getConnection(url, user, password);
167
+ Statement stmt = conn.createStatement();
168
+ ResultSet rs = stmt.executeQuery("SELECT * FROM my_table LIMIT 10")) {
169
+
170
+ ResultSetMetaData meta = rs.getMetaData();
171
+ int colCount = meta.getColumnCount();
172
+
173
+ // 打印列名
174
+ for (int i = 1; i <= colCount; i++) {
175
+ System.out.print(meta.getColumnName(i) + "\t");
176
+ }
177
+ System.out.println();
178
+
179
+ // 打印数据
180
+ while (rs.next()) {
181
+ for (int i = 1; i <= colCount; i++) {
182
+ System.out.print(rs.getString(i) + "\t");
183
+ }
184
+ System.out.println();
185
+ }
186
+ }
187
+ }
188
+ }
189
+ ```
190
+
191
+ ### 5.2 使用 Properties 对象
192
+
193
+ ```java
194
+ import java.sql.*;
195
+ import java.util.Properties;
196
+
197
+ public class ClickZettaPropsExample {
198
+ public static void main(String[] args) throws Exception {
199
+ String url = "jdbc:clickzetta://your_instance.cn-shanghai-alicloud.api.clickzetta.com"
200
+ + "/my_workspace"
201
+ + "?virtualCluster=default_ap&schema=public";
202
+
203
+ Properties props = new Properties();
204
+ props.setProperty("user", "my_user");
205
+ props.setProperty("password", "my_password");
206
+
207
+ Class.forName("com.clickzetta.client.jdbc.ClickZettaDriver");
208
+
209
+ try (Connection conn = DriverManager.getConnection(url, props)) {
210
+ // 使用 PreparedStatement 防止 SQL 注入
211
+ String sql = "SELECT * FROM my_table WHERE id = ?";
212
+ try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
213
+ pstmt.setInt(1, 42);
214
+ try (ResultSet rs = pstmt.executeQuery()) {
215
+ while (rs.next()) {
216
+ System.out.println(rs.getString(1));
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ }
223
+ ```
224
+
225
+ ### 5.3 DDL 操作
226
+
227
+ ```java
228
+ try (Connection conn = DriverManager.getConnection(url, user, password);
229
+ Statement stmt = conn.createStatement()) {
230
+
231
+ // 创建表
232
+ stmt.execute("CREATE TABLE IF NOT EXISTS test_table ("
233
+ + " id BIGINT, "
234
+ + " name STRING, "
235
+ + " created_at TIMESTAMP"
236
+ + ")");
237
+
238
+ // 插入数据
239
+ stmt.execute("INSERT INTO test_table VALUES (1, 'Alice', CURRENT_TIMESTAMP)");
240
+
241
+ // 查询验证
242
+ try (ResultSet rs = stmt.executeQuery("SELECT * FROM test_table")) {
243
+ while (rs.next()) {
244
+ System.out.printf("id=%d, name=%s, created_at=%s%n",
245
+ rs.getLong("id"),
246
+ rs.getString("name"),
247
+ rs.getTimestamp("created_at"));
248
+ }
249
+ }
250
+ }
251
+ ```
252
+
253
+ ---
254
+
255
+ ## 6. Properties 文件格式
256
+
257
+ ClickZetta JDBC 支持通过 `.properties` 文件配置连接参数,常用于 SQLLine 等工具。
258
+
259
+ ### 6.1 标准连接配置
260
+
261
+ ```properties
262
+ # clickzetta.properties — 标准 API 网关连接
263
+ url: jdbc:clickzetta://your_instance.cn-shanghai-alicloud.api.clickzetta.com/your_workspace?virtualCluster=default_ap&schema=public
264
+ driver: com.clickzetta.client.jdbc.ClickZettaDriver
265
+ user: my_user
266
+ password: my_password
267
+ ```
268
+
269
+ > **来源**:`sqlline_cz/clickzetta.properties` 的实际格式。
270
+
271
+ ### 6.2 直连配置
272
+
273
+ ```properties
274
+ # cz_perf.properties — 直连服务端口
275
+ url: jdbc:clickzetta://21.47.94.153.204:8523/my_workspace?schema=my_schema&vcluster=my_vcluster&access_mode=direct_service
276
+ driver: com.clickzetta.client.jdbc.ClickZettaDriver
277
+ user: my_user
278
+ password: my_password
279
+ ```
280
+
281
+ > **来源**:`sqlline_cz/cz_perf_ql_21.properties` 的实际格式。
282
+
283
+ ### 6.3 字段说明
284
+
285
+ | 字段 | 必填 | 说明 |
286
+ |------|------|------|
287
+ | `url` | ✅ | JDBC 连接 URL |
288
+ | `driver` | ✅ | 驱动类全限定名,固定为 `com.clickzetta.client.jdbc.ClickZettaDriver` |
289
+ | `user` | ✅ | 用户名 |
290
+ | `password` | ✅ | 密码 |
291
+
292
+ > ⚠️ **格式注意**:properties 文件中使用冒号 `:` 或等号 `=` 作为分隔符均可。
293
+ > 实际代码中两种格式都有使用(`clickzetta.properties` 使用冒号+空格,
294
+ > `cz_perf_ql_21.properties` 使用冒号无空格)。
295
+
296
+ ---
297
+
298
+ ## 7. SQLLine 使用方法
299
+
300
+ [SQLLine](https://github.com/julianhyde/sqlline) 是一个基于 JDBC 的命令行 SQL 客户端。
301
+ ClickZetta 提供了预配置的 SQLLine 启动脚本。
302
+
303
+ ### 7.1 环境准备
304
+
305
+ ```bash
306
+ # 1. 确保 JAVA_HOME 已设置
307
+ export JAVA_HOME=/path/to/jdk
308
+
309
+ # 2. 下载 ClickZetta JDBC 驱动
310
+ cd sqlline_cz/
311
+ bash setup.sh
312
+
313
+ # 3. 目录结构应包含:
314
+ # sqlline_cz/
315
+ # ├── clickzetta.properties # 连接配置
316
+ # ├── clickzetta-java-*-shaded.jar # JDBC 驱动
317
+ # ├── sqlline-1.12.0-jar-with-dependencies.jar # SQLLine
318
+ # ├── sqlline # 启动脚本
319
+ # └── log4j.properties # 日志配置(可选)
320
+ ```
321
+
322
+ ### 7.2 使用 Properties 文件连接
323
+
324
+ ```bash
325
+ # 使用默认配置文件
326
+ ./sqlline -p clickzetta.properties
327
+
328
+ # 使用指定配置文件(如性能测试环境)
329
+ ./sqlline -p cz_perf_ql_21.properties
330
+ ```
331
+
332
+ ### 7.3 使用命令行参数连接
333
+
334
+ ```bash
335
+ ./sqlline \
336
+ -u "jdbc:clickzetta://your_instance.cn-shanghai-alicloud.api.clickzetta.com/my_workspace?virtualCluster=default_ap&schema=public" \
337
+ -n my_user \
338
+ -p my_password \
339
+ -d com.clickzetta.client.jdbc.ClickZettaDriver
340
+ ```
341
+
342
+ ### 7.4 SQLLine 常用命令
343
+
344
+ | 命令 | 说明 |
345
+ |------|------|
346
+ | `!tables` | 列出所有表 |
347
+ | `!columns <table>` | 查看表结构 |
348
+ | `!describe <table>` | 描述表信息 |
349
+ | `!quit` | 退出 |
350
+ | `!help` | 帮助 |
351
+ | `!outputformat csv` | 切换输出为 CSV 格式 |
352
+ | `!outputformat table` | 切换输出为表格格式 |
353
+
354
+ ### 7.5 启用调试日志
355
+
356
+ ```bash
357
+ # 设置环境变量启用 debug 日志
358
+ export SQLLINE_DEBUG_ENABLE=TRUE
359
+ ./sqlline -p clickzetta.properties
360
+
361
+ # 日志输出到 debug.log 和 error.log
362
+ ```
363
+
364
+ > **来源**:`sqlline_cz/sqlline` 脚本中的环境变量检测:
365
+ > ```bash
366
+ > if [[ $SQLLINE_DEBUG_ENABLE == "TRUE" ]] || [[ $SQLLINE_DEBUG_ENABLE == "true" ]]; then
367
+ > JAVA_OPTS="$JAVA_OPTS -Dlog4j.configuration=file:log4j.properties"
368
+ > fi
369
+ > ```
370
+
371
+ ### 7.6 日志配置
372
+
373
+ `log4j.properties` 配置示例(来自 `sqlline_cz/log4j.properties`):
374
+
375
+ ```properties
376
+ # 根日志级别
377
+ log4j.rootLogger = info,D,E
378
+
379
+ # DEBUG 级别日志 → debug.log
380
+ log4j.appender.D = org.apache.log4j.FileAppender
381
+ log4j.appender.D.File = ./debug.log
382
+ log4j.appender.D.Append = true
383
+ log4j.appender.D.Threshold = DEBUG
384
+ log4j.appender.D.layout = org.apache.log4j.PatternLayout
385
+ log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
386
+
387
+ # ERROR 级别日志 → error.log
388
+ log4j.appender.E = org.apache.log4j.FileAppender
389
+ log4j.appender.E.File = ./error.log
390
+ log4j.appender.E.Append = true
391
+ log4j.appender.E.Threshold = ERROR
392
+ log4j.appender.E.layout = org.apache.log4j.PatternLayout
393
+ log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
394
+ ```
395
+
396
+ ---
397
+
398
+ ## 8. BI 工具集成
399
+
400
+ ### 8.1 通用 JDBC 配置
401
+
402
+ 大多数 BI 工具(DBeaver、DataGrip、Tableau 等)支持自定义 JDBC 驱动:
403
+
404
+ 1. **添加驱动 JAR**:将 `clickzetta-java-*-shaded.jar` 添加到工具的驱动目录
405
+ 2. **配置驱动类**:`com.clickzetta.client.jdbc.ClickZettaDriver`
406
+ 3. **填写 URL**:使用标准 JDBC URL 格式
407
+ 4. **输入凭据**:用户名和密码
408
+
409
+ ### 8.2 DBeaver 配置步骤
410
+
411
+ 1. 菜单 → Database → Driver Manager → New
412
+ 2. Driver Name: `ClickZetta`
413
+ 3. Class Name: `com.clickzetta.client.jdbc.ClickZettaDriver`
414
+ 4. URL Template: `jdbc:clickzetta://{host}/{database}?virtualCluster={server}&schema={schema}`
415
+ 5. Libraries → Add File → 选择 `clickzetta-java-*-shaded.jar`
416
+ 6. 创建新连接时选择 ClickZetta 驱动
417
+
418
+ ---
419
+
420
+ ## 9. 适用场景
421
+
422
+ | 场景 | 说明 |
423
+ |------|------|
424
+ | Java 应用集成 | 通过标准 JDBC API 在 Java 应用中查询数据 |
425
+ | SQLLine 命令行 | 交互式 SQL 执行和调试 |
426
+ | BI 工具连接 | DBeaver、DataGrip、Tableau 等通过 JDBC 连接 |
427
+ | ETL 工具 | 支持 JDBC 的 ETL 工具(如 Kettle、Talend) |
428
+ | 性能测试 | 使用直连模式进行性能基准测试 |
429
+ | Spring Boot | 配置为 DataSource 在 Spring 应用中使用 |
430
+
431
+ ---
432
+
433
+ ## 10. Spring Boot 集成示例
434
+
435
+ ```yaml
436
+ # application.yml
437
+ spring:
438
+ datasource:
439
+ url: jdbc:clickzetta://your_instance.cn-shanghai-alicloud.api.clickzetta.com/my_workspace?virtualCluster=default_ap&schema=public
440
+ username: my_user
441
+ password: my_password
442
+ driver-class-name: com.clickzetta.client.jdbc.ClickZettaDriver
443
+ ```
444
+
445
+ ---
446
+
447
+ ## 11. 常见问题
448
+
449
+ | 错误信息 | 原因 | 解决方案 |
450
+ |---------|------|---------|
451
+ | `ClassNotFoundException: com.clickzetta.client.jdbc.ClickZettaDriver` | JDBC 驱动 JAR 不在 classpath 中 | 确保 shaded JAR 在 classpath 中 |
452
+ | `java.lang.reflect.InaccessibleObjectException` | JDK 9+ 模块系统限制 | 添加 `--add-opens=java.base/java.nio=ALL-UNNAMED` |
453
+ | `Connection refused` | 服务地址或端口错误 | 检查 URL 中的 service 地址和端口 |
454
+ | `Authentication failed` | 用户名或密码错误 | 检查 user/password 配置 |
455
+ | `Workspace not found` | 工作空间名称错误 | 确认 URL 路径中的 workspace 名称 |
456
+ | `Virtual cluster not found` | 虚拟集群名称错误或参数名错误 | 标准模式用 `virtualCluster`,直连用 `vcluster` |
457
+
458
+ ---
459
+
460
+ ## 12. 与其他连接方式对比
461
+
462
+ | 特性 | JDBC | Python SDK | SQLAlchemy |
463
+ |------|------|-----------|------------|
464
+ | 语言 | Java | Python | Python |
465
+ | 驱动类型 | JDBC Type 4 | 原生 Python | 基于 Python SDK |
466
+ | 连接池 | 应用层管理 | 无内置 | 内置连接池 |
467
+ | BI 工具支持 | ✅ 广泛 | ❌ | ✅ 通过 SQLAlchemy |
468
+ | DataFrame API | ❌ | ❌ | ❌ |
469
+ | 适合场景 | Java 应用、BI 工具 | Python 脚本 | ORM、Web 框架 |
470
+
471
+ ---
472
+
473
+ ## 13. 交叉引用
474
+
475
+ - [主连接指南 §4.4](../SKILL.md) — JDBC 快速入门
476
+ - [Python SDK 参考](python-sdk.md) — Python 原生连接
477
+ - [SQLAlchemy 参考](sqlalchemy.md) — SQLAlchemy 集成
478
+ - [配置文件管理参考](config-file.md) — JSON 配置文件方式
@@ -0,0 +1,225 @@
1
+ # Python SDK — `clickzetta.connect()` 详细参考
2
+
3
+ > **包名**: `clickzetta-connector-python`
4
+ > **最低版本**: >= 0.8.92
5
+ > **Python 版本**: 推荐 **Python 3.12**(最低 3.10,不支持 3.9 及以下)
6
+ > **返回**: [ClickZetta 连接主指南](../SKILL.md)
7
+
8
+ ---
9
+
10
+ ## 1. 安装
11
+
12
+ ```bash
13
+ # 方式 1:venv(Python 内置,推荐)
14
+ python3.12 -m venv .venv
15
+ source .venv/bin/activate # macOS/Linux | .venv\Scripts\activate (Windows)
16
+ pip install clickzetta-connector-python -i https://pypi.tuna.tsinghua.edu.cn/simple
17
+
18
+ # 方式 2:pyenv(需要切换 Python 版本时)
19
+ pyenv install 3.12.9 && pyenv local 3.12.9
20
+ python -m venv .venv && source .venv/bin/activate
21
+ pip install clickzetta-connector-python -i https://pypi.tuna.tsinghua.edu.cn/simple
22
+
23
+ # 方式 3:conda(数据科学环境)
24
+ conda create -n lakehouse python=3.12 -y && conda activate lakehouse
25
+ pip install clickzetta-connector-python -i https://pypi.tuna.tsinghua.edu.cn/simple
26
+ ```
27
+
28
+ 如果需要同时使用 SQLAlchemy 集成:
29
+
30
+ ```bash
31
+ pip install clickzetta-connector-python clickzetta-sqlalchemy \
32
+ -i https://pypi.tuna.tsinghua.edu.cn/simple
33
+ ```
34
+
35
+ ---
36
+
37
+ ## 2. 连接参数一览
38
+
39
+ | 参数 | 类型 | 必填 | 说明 |
40
+ |------|------|------|------|
41
+ | `service` | str | ✅ | 服务地址,如 `cn-shanghai-alicloud.api.clickzetta.com` |
42
+ | `instance` | str | ✅ | 实例名称 |
43
+ | `workspace` | str | ✅ | 工作空间(对应数据库) |
44
+ | `schema` | str | ✅ | Schema 名称,默认通常为 `public` |
45
+ | `username` | str | ✅ | 用户名 |
46
+ | `password` | str | ✅ | 密码 |
47
+ | `vcluster` | str | ✅ | 虚拟集群名称 |
48
+ | `hints` | dict | ❌ | SDK 运行时参数(见第 5 节) |
49
+
50
+ ---
51
+
52
+ ## 3. 完整代码示例
53
+
54
+ ### 3.1 基础查询
55
+
56
+ ```python
57
+ import clickzetta
58
+
59
+ # 建立连接(7 个必填参数)
60
+ conn = clickzetta.connect(
61
+ service="your-region.api.clickzetta.com", # 按实例所在区域填写,参见 SKILL.md 区域地址表
62
+ username="your_username",
63
+ password="your_password",
64
+ instance="your_instance",
65
+ workspace="your_workspace",
66
+ schema="public",
67
+ vcluster="default_ap"
68
+ )
69
+
70
+ try:
71
+ cursor = conn.cursor()
72
+
73
+ # 执行查询
74
+ cursor.execute("SELECT * FROM my_table LIMIT 10")
75
+
76
+ # 获取所有结果
77
+ rows = cursor.fetchall()
78
+ for row in rows:
79
+ print(row)
80
+
81
+ # 获取列名
82
+ columns = [desc[0] for desc in cursor.description]
83
+ print("列名:", columns)
84
+
85
+ finally:
86
+ cursor.close()
87
+ conn.close()
88
+ ```
89
+
90
+ ### 3.2 Cursor 操作详解
91
+
92
+ ```python
93
+ cursor = conn.cursor()
94
+ cursor.execute("SELECT id, name, amount FROM orders WHERE status = 'active'")
95
+
96
+ # fetchone() — 逐行获取
97
+ first_row = cursor.fetchone()
98
+
99
+ # fetchmany(size) — 批量获取指定行数
100
+ batch = cursor.fetchmany(size=100)
101
+
102
+ # fetchall() — 获取剩余全部行
103
+ remaining = cursor.fetchall()
104
+
105
+ cursor.close()
106
+ ```
107
+
108
+ ### 3.3 DDL / DML 操作
109
+
110
+ ```python
111
+ cursor = conn.cursor()
112
+
113
+ # 建表
114
+ cursor.execute("""
115
+ CREATE TABLE IF NOT EXISTS events (
116
+ event_id BIGINT,
117
+ event_type STRING,
118
+ event_time TIMESTAMP,
119
+ payload STRING
120
+ )
121
+ """)
122
+
123
+ # 插入数据
124
+ cursor.execute("""
125
+ INSERT INTO events VALUES
126
+ (1, 'click', CURRENT_TIMESTAMP, '{"page": "/home"}')
127
+ """)
128
+
129
+ cursor.close()
130
+ ```
131
+
132
+ ---
133
+
134
+ ## 4. 环境变量传参(推荐)
135
+
136
+ 生产环境中,**绝对不要在代码中硬编码凭证**。使用环境变量:
137
+
138
+ ```python
139
+ import os
140
+ import clickzetta
141
+
142
+ conn = clickzetta.connect(
143
+ service=os.getenv("CLICKZETTA_SERVICE"),
144
+ username=os.getenv("CLICKZETTA_USERNAME"),
145
+ password=os.getenv("CLICKZETTA_PASSWORD"),
146
+ instance=os.getenv("CLICKZETTA_INSTANCE"),
147
+ workspace=os.getenv("CLICKZETTA_WORKSPACE"),
148
+ schema=os.getenv("CLICKZETTA_SCHEMA", "public"),
149
+ vcluster=os.getenv("CLICKZETTA_VCLUSTER", "default_ap")
150
+ )
151
+ ```
152
+
153
+ 对应的 `.env` 文件(需加入 `.gitignore`):
154
+
155
+ ```bash
156
+ CLICKZETTA_SERVICE=your-region.api.clickzetta.com
157
+ CLICKZETTA_INSTANCE=my_instance
158
+ CLICKZETTA_WORKSPACE=my_workspace
159
+ CLICKZETTA_SCHEMA=public
160
+ CLICKZETTA_USERNAME=my_user
161
+ CLICKZETTA_PASSWORD=my_secret
162
+ CLICKZETTA_VCLUSTER=default_ap
163
+ ```
164
+
165
+ ---
166
+
167
+ ## 5. `hints` 参数详解
168
+
169
+ `hints` 是一个 `dict`,用于传递 SDK 运行时调优参数:
170
+
171
+ ```python
172
+ conn = clickzetta.connect(
173
+ service="your-region.api.clickzetta.com", # 按实例所在区域填写,参见 SKILL.md 区域地址表
174
+ username="your_username",
175
+ password="your_password",
176
+ instance="your_instance",
177
+ workspace="your_workspace",
178
+ schema="public",
179
+ vcluster="default_ap",
180
+ hints={
181
+ "sdk.job.timeout": 300,
182
+ "query_tag": "my-etl-job",
183
+ "cz.sql.table.scan.push.down.filter": "true",
184
+ "cz.storage.parquet.vector.index.read.memory.cache": "true"
185
+ }
186
+ )
187
+ ```
188
+
189
+ ### 常用 hints
190
+
191
+ | Key | 类型 | 默认值 | 说明 |
192
+ |-----|------|--------|------|
193
+ | `sdk.job.timeout` | int | 300 | 查询超时(秒) |
194
+ | `query_tag` | str | — | 查询标签,用于审计追踪 |
195
+ | `cz.sql.table.scan.push.down.filter` | str | `"true"` | 启用过滤下推 |
196
+ | `cz.sql.table.scan.enable.ensure.filter` | str | `"true"` | 确保过滤条件生效 |
197
+ | `cz.storage.parquet.vector.index.read.memory.cache` | str | `"true"` | 向量索引内存缓存 |
198
+ | `cz.storage.parquet.vector.index.read.local.cache` | str | `"false"` | 向量索引本地磁盘缓存 |
199
+ | `cz.storage.always.prefetch.internal` | str | `"true"` | 预取优化 |
200
+ | `cz.optimizer.generate.columns.always.valid` | str | `"true"` | 列生成优化 |
201
+ | `cz.sql.index.prewhere.enabled` | str | `"true"` | 索引预过滤 |
202
+ | `cz.storage.parquet.enable.io.prefetch` | str | `"false"` | Parquet IO 预取 |
203
+
204
+ ---
205
+
206
+ ## 6. 适用场景
207
+
208
+ | 场景 | 推荐度 | 说明 |
209
+ |------|--------|------|
210
+ | 直接 SQL 查询 | ⭐⭐⭐ | 最简洁的方式执行 SQL |
211
+ | 脚本 & 自动化 | ⭐⭐⭐ | ETL 脚本、定时任务 |
212
+ | Jupyter Notebook | ⭐⭐⭐ | 数据探索与分析 |
213
+ | Cursor 逐行处理 | ⭐⭐⭐ | 大结果集逐行/分批处理 |
214
+ | DataFrame 操作 | ⭐ | 建议改用 [ZettaPark Session](zettapark-session.md) |
215
+ | Web 应用 ORM | ⭐ | 建议改用 [SQLAlchemy](sqlalchemy.md) |
216
+
217
+ ---
218
+
219
+ ## 7. 与其他连接方式的关系
220
+
221
+ - **ZettaPark Session** 底层也调用 `clickzetta.connect()`,但封装了 DataFrame API
222
+ - **SQLAlchemy** 使用 `clickzetta://` URL 协议,底层通过 connector 驱动
223
+ - **配置文件** 方式使用 `connections.json` 管理连接参数,最终也传递给 `clickzetta.connect()`
224
+
225
+ > 选择指南见 [SKILL.md 决策树](../SKILL.md#决策树)。