Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .translation-init
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Translation initialization: 2025-08-11T07:47:48.618469
Translation initialization: 2025-08-11T10:08:59.783083
38 changes: 19 additions & 19 deletions docs/cn/developer/00-drivers/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
title: 驱动
---

Databend 为多种编程语言提供官方驱动,使您能够从应用程序连接并交互 Databend。
Databend 为多种编程语言提供了官方驱动,使你能够从应用程序连接到 Databend 并与之交互

## 快速入门

1. **选择语言** - 从 Python、Go、Node.js、Java 或 Rust 中选择
2. **获取连接字符串** - 使用下方 DSN 格式
3. **安装并连接** - 遵循各驱动的专属文档
2. **获取连接字符串** - 使用下方的 DSN 格式
3. **安装并连接** - 参考各驱动的专属文档

## 连接字符串(DSN)

Expand All @@ -18,30 +18,30 @@ Databend 为多种编程语言提供官方驱动,使您能够从应用程序
databend://user:pwd@host[:port]/[database][?sslmode=disable][&arg1=value1]
```

> `user:pwd` 指 Databend 中的 SQL 用户。参见 [CREATE USER](/sql/sql-commands/ddl/user/user-create-user) 创建用户并授予权限。
> `user:pwd` 指 Databend 中的 SQL 用户。参阅 [CREATE USER](/sql/sql-commands/ddl/user/user-create-user) 创建用户并授予权限。

### 连接示例

| 部署方式 | 连接字符串 |
|------------|-------------------|
| **自托管** | `databend://user:pwd@host:8000/database?sslmode=disable` |
| **Databend Cloud** | `databend://user:pwd@host:443/database?warehouse=wh` |
| 部署方式 | 连接字符串 |
| ------------------ | -------------------------------------------------------- |
| **自托管** | `databend://user:pwd@host:8000/database?sslmode=disable` |
| **Databend Cloud** | `databend://user:pwd@host:443/database?warehouse=wh` |

### 参数参考

| 参数 | 描述 | 自托管 | Databend Cloud | 示例 |
|-----------|-------------|-------------|----------------|----------|
| `sslmode` | SSL 模式 | `disable`(必需) | 不使用 | `?sslmode=disable` |
| `warehouse` | Warehouse 名称 | 不使用 | 必需 | `?warehouse=compute_wh` |
| 参数 | 描述 | 自托管 | Databend Cloud | 示例 |
| ----------- | -------------- | -------------------- | -------------- | ----------------------- |
| `sslmode` | SSL 模式 | `disable`(必需) | 不使用 | `?sslmode=disable` |
| `warehouse` | Warehouse 名称 | 不使用 | 必需 | `?warehouse=compute_wh` |

> **Databend Cloud**:[获取连接信息 →](/guides/cloud/using-databend-cloud/warehouses#obtaining-connection-information)

## 可用驱动

| 语言 | 包 | 主要特性 |
|----------|---------|-------------|
| **[Python](./python)** | `databend-driver`<br/>`databend-sqlalchemy` | • 同步/异步支持<br/>• SQLAlchemy 方言<br/>• 兼容 PEP 249 |
| **[Go](./golang)** | `databend-go` | • database/sql 接口<br/>• 连接池<br/>• 批量操作 |
| **[Node.js](./nodejs)** | `databend-driver` | • TypeScript 支持<br/>• 基于 Promise 的 API<br/>• 流式结果 |
| **[Java](./jdbc)** | `databend-jdbc` | • 兼容 JDBC 4.0<br/>• 连接池<br/>• 预处理语句 |
| **[Rust](./rust)** | `databend-driver` | • Async/await 支持<br/>• 类型安全查询<br/>• 零拷贝反序列化 |
| 语言 | 包 | 主要特性 |
| ----------------------- | ------------------------------------------- | ------------------------------------------------------------------------- |
| **[Python](./python)** | `databend-driver`<br/>`databend-sqlalchemy` | • 同步/异步支持<br/>• SQLAlchemy 方言<br/>• 兼容 PEP 249 |
| **[Go](./golang)** | `databend-go` | • database/sql 接口<br/>• 连接池<br/>• 批量操作 |
| **[Node.js](./nodejs)** | `databend-driver` | • TypeScript 支持<br/>• 基于 Promise 的 API<br/>• 流式结果 |
| **[Java](./jdbc)** | `databend-jdbc` | • 兼容 JDBC 4.0<br/>• 连接池<br/>• 预处理语句 |
| **[Rust](./rust)** | `databend-driver` | • Async/await 支持<br/>• 类型安全查询<br/>• 零拷贝反序列化 |
76 changes: 38 additions & 38 deletions docs/cn/tutorials/load/automating-json-log-loading-with-vector.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,44 @@
---
title: 使用 Vector 自动化 JSON 日志加载
title: 使用 Vector 自动加载 JSON 日志
---

在本教程中,我们将模拟在本地生成日志,使用 [Vector](https://vector.dev/) 收集它们,将它们存储在 S3 中,并使用计划任务自动将它们导入到 Databend Cloud
在本教程中,我们将模拟在本地生成日志,使用 [Vector](https://vector.dev/) 收集日志,将其存储到 S3,并通过定时任务自动将其摄取到 Databend Cloud。

![使用 Vector 自动化 JSON 日志加载](@site/static/img/documents/tutorials/vector-tutorial.png)
![使用 Vector 自动加载 JSON 日志](@site/static/img/documents/tutorials/vector-tutorial.png)

## 开始之前
## 准备工作

在开始之前,请确保您已准备好以下先决条件
开始前,请确保已准备好以下先决条件

- **Amazon S3 Bucket**: 一个 S3 bucket,用于存储 Vector 收集的日志。[了解如何创建 S3 bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。
- **AWS 凭证**: AWS Access Key ID 和 Secret Access Key,具有访问您的 S3 bucket 的足够权限。[管理您的 AWS 凭证](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys)。
- **AWS CLI**: 确保已安装 [AWS CLI](https://aws.amazon.com/cli/) 并配置了访问您的 S3 bucket 的必要权限
- **Docker**: 确保您的本地机器上已安装 [Docker](https://www.docker.com/),因为它将用于设置 Vector。
- **Amazon S3 存储桶**:用于存放 Vector 收集的日志。 [了解如何创建 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。
- **AWS 凭证**:具备访问 S3 存储桶权限的 AWS Access Key ID 和 Secret Access Key。 [管理 AWS 凭证](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys)。
- **AWS CLI**确保已安装 [AWS CLI](https://aws.amazon.com/cli/) 并配置好访问 S3 存储桶所需的权限
- **Docker**:确保本地已安装 [Docker](https://www.docker.com/),用于部署 Vector。

## 步骤 1:在 S3 Bucket 中创建目标文件夹
## 第一步:在 S3 存储桶中创建目标文件夹

要存储 Vector 收集的日志,请在您的 S3 bucket 中创建一个名为 logs 的文件夹。在本教程中,我们使用 `s3://databend-doc/logs/` 作为目标位置
为存放 Vector 收集的日志,请在 S3 存储桶中创建一个名为 logs 的文件夹。本教程使用 `s3://databend-doc/logs/` 作为目标路径

此命令在 `databend-doc` bucket 中创建一个名为 `logs` 的空文件夹:
以下命令在 databend-doc 存储桶中创建名为 logs 的空文件夹:

```bash
aws s3api put-object --bucket databend-doc --key logs/
```

## 步骤 2:创建本地日志文件
## 第二步:创建本地日志文件

通过创建本地日志文件来模拟日志生成。在本教程中,我们使用 `/Users/eric/Documents/logs/app.log` 作为文件路径。
通过创建本地日志文件来模拟日志生成。本教程使用 `/Users/eric/Documents/logs/app.log` 作为文件路径。

将以下 JSON 行添加到文件中以表示示例日志事件
将以下 JSON 行添加到文件中,作为示例日志事件

```json title='app.log'
{"user_id": 1, "event": "login", "timestamp": "2024-12-08T10:00:00Z"}
{"user_id": 2, "event": "purchase", "timestamp": "2024-12-08T10:05:00Z"}
```

## 步骤 3:配置并运行 Vector
## 第三步:配置并运行 Vector

1. 在您的本地机器上创建一个名为 `vector.yaml` 的 Vector 配置文件。在本教程中,我们在 `/Users/eric/Documents/vector.yaml` 中创建它,内容如下:
1. 在本地创建名为 `vector.yaml` 的 Vector 配置文件。本教程将其放在 `/Users/eric/Documents/vector.yaml`,内容如下:

```yaml title='vector.yaml'
sources:
Expand All @@ -63,16 +63,16 @@ sinks:
- "extract_message"
bucket: databend-doc
region: us-east-2
key_prefix: "logs/"
content_type: "text/plain"
key_prefix: "logs/"
content_type: "text/plain"
encoding:
codec: "native_json"
codec: "native_json"
auth:
access_key_id: "<your-access-key-id>"
secret_access_key: "<your-secret-access-key>"
```

2. 使用 Docker 启动 Vector,映射配置文件和本地日志目录
2. 使用 Docker 启动 Vector,并映射配置文件和本地日志目录

```bash
docker run \
Expand All @@ -84,35 +84,35 @@ docker run \
timberio/vector:nightly-alpine
```

3. 稍等片刻,然后检查是否有任何日志已同步到 S3 上的 `logs` 文件夹:
3. 稍等片刻,然后检查日志是否已同步到 S3 logs 文件夹:

```bash
aws s3 ls s3://databend-doc/logs/
```

如果日志文件已成功同步到 S3,您应该看到类似于以下的输出
若日志文件已成功同步到 S3,将看到类似以下输出

```bash
2024-12-10 15:22:13 0
2024-12-10 17:52:42 112 1733871161-7b89e50a-6eb4-4531-8479-dd46981e4674.log.gz
```

您现在可以从您的 bucket 下载同步的日志文件
现在可从存储桶下载已同步的日志文件

```bash
aws s3 cp s3://databend-doc/logs/1733871161-7b89e50a-6eb4-4531-8479-dd46981e4674.log.gz ~/Documents/
```

与原始日志相比,同步的日志采用 NDJSON 格式,每个记录都包装在一个外部 `log` 字段中:
与原始日志相比,同步后的日志为 NDJSON 格式,每条记录被包裹在外层 `log` 字段中:

```json
{"log":{"event":"login","timestamp":"2024-12-08T10:00:00Z","user_id":1}}
{"log":{"event":"purchase","timestamp":"2024-12-08T10:05:00Z","user_id":2}}
```

## 步骤 4:在 Databend Cloud 中创建任务
## 第四步:在 Databend Cloud 中创建任务

1. 打开一个 worksheet,并创建一个外部 Stage,链接到您的 bucket 中的 `logs` 文件夹
1. 打开工作表,创建一个指向存储桶中 logs 文件夹的外部 Stage

```sql
CREATE STAGE mylog 's3://databend-doc/logs/' CONNECTION=(
Expand All @@ -121,7 +121,7 @@ CREATE STAGE mylog 's3://databend-doc/logs/' CONNECTION=(
);
```

成功创建 Stage 后,您可以列出其中的文件
Stage 创建成功后,可列出其中的文件

```sql
LIST @mylog;
Expand All @@ -133,7 +133,7 @@ LIST @mylog;
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

2. 创建一个表,其列映射到日志中的字段
2. 创建与日志字段对应的表

```sql
CREATE TABLE logs (
Expand All @@ -143,21 +143,21 @@ CREATE TABLE logs (
);
```

3. 创建一个计划任务,将日志从外部 Stage 加载到 `logs` 表中
3. 创建定时任务,将日志从外部 Stage 加载到 logs

```sql
CREATE TASK IF NOT EXISTS myvectortask
WAREHOUSE = 'eric'
SCHEDULE = 1 MINUTE
SUSPEND_TASK_AFTER_NUM_FAILURES = 3
AS
COPY INTO logs
COPY INTO logs
FROM (
SELECT $1:log:event, $1:log:timestamp, $1:log:user_id
FROM @mylog/
)
FILE_FORMAT = (TYPE = NDJSON, COMPRESSION = AUTO)
MAX_FILES = 10000
FILE_FORMAT = (TYPE = NDJSON, COMPRESSION = AUTO)
MAX_FILES = 10000
PURGE = TRUE;
```

Expand All @@ -167,7 +167,7 @@ PURGE = TRUE;
ALTER TASK myvectortask RESUME;
```

稍等片刻,然后检查日志是否已加载到表中
稍等片刻,检查日志是否已加载到表中

```sql
SELECT * FROM logs;
Expand All @@ -180,16 +180,16 @@ SELECT * FROM logs;
└──────────────────────────────────────────────────────────┘
```

如果您现在运行 `LIST @mylog;`,您将看不到任何列出的文件。这是因为该任务配置为 `PURGE = TRUE`,这会在加载日志后从 S3 中删除同步的文件
此时若运行 `LIST @mylog;`,将看不到任何文件。这是因为任务配置了 `PURGE = TRUE`,加载日志后会从 S3 删除已同步的文件

现在,让我们模拟在本地日志文件 `app.log` 中生成另外两个日志
现在,让我们在本地日志文件 `app.log` 中再模拟生成两条日志

```bash
echo '{"user_id": 3, "event": "logout", "timestamp": "2024-12-08T10:10:00Z"}' >> /Users/eric/Documents/logs/app.log
echo '{"user_id": 4, "event": "login", "timestamp": "2024-12-08T10:15:00Z"}' >> /Users/eric/Documents/logs/app.log
```

稍等片刻,让日志同步到 S3(新文件应出现在 `logs` 文件夹中)。然后,计划任务会将新日志加载到表中。如果您再次查询该表,您将找到这些日志
稍等片刻,日志将同步到 S3(logs 文件夹中会出现新文件)。随后定时任务会把新日志加载到表中。再次查询表,即可看到这些日志

```sql
SELECT * FROM logs;
Expand All @@ -202,4 +202,4 @@ SELECT * FROM logs;
│ login │ 2024-12-08 10:00:00 │ 1 │
│ purchase │ 2024-12-08 10:05:00 │ 2 │
└──────────────────────────────────────────────────────────┘
```
```