@clickzetta/cz-cli-darwin-x64 0.3.18 → 0.3.20
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/bin/skills/clickzetta-access-control/SKILL.md +243 -0
- package/bin/skills/clickzetta-access-control/eval_cases.jsonl +3 -0
- package/bin/skills/clickzetta-access-control/references/dynamic-masking.md +86 -0
- package/bin/skills/clickzetta-access-control/references/grant-revoke.md +103 -0
- package/bin/skills/clickzetta-access-control/references/role-management.md +66 -0
- package/bin/skills/clickzetta-access-control/references/user-management.md +61 -0
- package/bin/skills/clickzetta-ai-vector-search/SKILL.md +160 -0
- package/bin/skills/clickzetta-ai-vector-search/eval_cases.jsonl +4 -0
- package/bin/skills/clickzetta-ai-vector-search/references/vector-search.md +155 -0
- package/bin/skills/clickzetta-data-retention/SKILL.md +160 -0
- package/bin/skills/clickzetta-data-retention/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-data-retention/references/lifecycle-reference.md +175 -0
- package/bin/skills/clickzetta-dw-modeling/SKILL.md +259 -0
- package/bin/skills/clickzetta-dw-modeling/eval_cases.jsonl +4 -0
- package/bin/skills/clickzetta-dw-modeling/references/modeling-patterns.md +100 -0
- package/bin/skills/clickzetta-external-function/SKILL.md +203 -0
- package/bin/skills/clickzetta-external-function/eval_cases.jsonl +4 -0
- package/bin/skills/clickzetta-external-function/references/external-function-ddl.md +171 -0
- package/bin/skills/clickzetta-index-manager/SKILL.md +140 -0
- package/bin/skills/clickzetta-index-manager/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-index-manager/references/bloomfilter-index.md +67 -0
- package/bin/skills/clickzetta-index-manager/references/index-management.md +73 -0
- package/bin/skills/clickzetta-index-manager/references/inverted-index.md +80 -0
- package/bin/skills/clickzetta-index-manager/references/vector-index.md +81 -0
- package/bin/skills/clickzetta-lakehouse-connect/SKILL.md +218 -0
- package/bin/skills/clickzetta-lakehouse-connect/eval_cases.jsonl +3 -0
- package/bin/skills/clickzetta-lakehouse-connect/evals/evals.json +35 -0
- package/bin/skills/clickzetta-lakehouse-connect/references/config-file.md +435 -0
- package/bin/skills/clickzetta-lakehouse-connect/references/jdbc.md +478 -0
- package/bin/skills/clickzetta-lakehouse-connect/references/python-sdk.md +225 -0
- package/bin/skills/clickzetta-lakehouse-connect/references/sqlalchemy.md +468 -0
- package/bin/skills/clickzetta-lakehouse-connect/references/zettapark-session.md +445 -0
- package/bin/skills/clickzetta-manage-comments/SKILL.md +219 -0
- package/bin/skills/clickzetta-manage-comments/eval_cases.jsonl +3 -0
- package/bin/skills/clickzetta-metadata/SKILL.md +483 -0
- package/bin/skills/clickzetta-metadata/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-metadata/references/instance-views-reference.md +276 -0
- package/bin/skills/clickzetta-metadata/references/metering-views-reference.md +137 -0
- package/bin/skills/clickzetta-metadata/references/show-desc-reference.md +326 -0
- package/bin/skills/clickzetta-metadata/references/views-reference.md +271 -0
- package/bin/skills/clickzetta-monitoring/SKILL.md +199 -0
- package/bin/skills/clickzetta-monitoring/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-monitoring/references/job-history-analysis.md +97 -0
- package/bin/skills/clickzetta-monitoring/references/show-jobs.md +48 -0
- package/bin/skills/clickzetta-overview/SKILL.md +102 -0
- package/bin/skills/clickzetta-overview/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-overview/references/brands-and-endpoints.md +79 -0
- package/bin/skills/clickzetta-overview/references/object-model.md +311 -0
- package/bin/skills/clickzetta-overview/references/studio-modules.md +173 -0
- package/bin/skills/clickzetta-query-optimizer/eval_cases.jsonl +5 -0
- package/bin/skills/cz-cli/SKILL.md +1 -1
- package/bin/skills/cz-cli-inner/SKILL.md +8 -0
- package/package.json +1 -1
|
@@ -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#决策树)。
|