# @depyronick/nestjs-clickhouse 中文文档

规范地址：https://npmcn.com/package/%40depyronick/nestjs-clickhouse/

版本：2\.1\.0
npm 元数据更新时间：2026-01-21T13:00:15.047Z
中文译文更新时间：2026-11-12T00:45:34.370Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40depyronick/nestjs-clickhouse
原文对照：https://npmcn.com/package/%40depyronick/nestjs-clickhouse/?lang=original
项目主页：https://github.com/depyronick/nestjs-clickhouse#readme
源码仓库：https://github.com/depyronick/nestjs-clickhouse

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：19 kB，8 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- peer 依赖：@nestjs/common ^10\.0\.0 \|\| ^11\.0\.0
- 首次发布：2021-11-12T13:27:50.870Z
- 最新版本发布：2026-01-21T13:00:14.921Z
- 近 30 天下载量：3526（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 1 个）

## 中文简介

点击 NestJS 的住房客户端模块

## 安装

```sh
npm install @depyronick/nestjs-clickhouse
```

也可以使用：`pnpm add @depyronick/nestjs-clickhouse`、`yarn add @depyronick/nestjs-clickhouse`、`bun add @depyronick/nestjs-clickhouse`

## README

## 说明

[点击之家](https://clickhouse.com/) 是使用SQL进行实时分析的开源高性能专栏OLAP数据库管理系统. 点击之家组合 [类型脚本](https://www.typescriptlang.org/) 帮助您用您的 ClickHouse 查询来开发更好的类型安全, 并给予您端到端的打字功能 .

## 安装

安装以下软件包:

```bash
$ npm i --save @depyronick/nestjs-clickhouse
```

## 快速启动

> 此 NestJS 模块是用于 **[@depyronick/ 点击之家- 客户端](https://github.com/depyronick/clickhouse-client "@depyronick/clickhouse-client")**。您可以在那里找到方法的最新文档.

### 导入模块

一旦安装过程完成,我们就可以导入 `ClickHouseModule` 输入根 `AppModule`。 。 。 .

```typescript
import { Module } from '@nestjs/common';
import { ClickHouseModule } from '@depyronick/nestjs-clickhouse';

@Module({
  imports: [
    ClickHouseModule.register([
      {
        name: 'ANALYTICS_SERVER',
        host: '127.0.0.1',
        password: '7h3ul71m473p4555w0rd',
      },
    ]),
  ],
})
export class AppModule {}
```

这个 `register()` 方法将注册具有指定连接选项的 ClickHouse 客户端.

见 **[点击之家选项](https://github.com/depyronick/clickhouse-client/blob/main/src/client/interfaces/ClickHouseClientOptions.ts "ClickHouseOptions")** 对象以获取更多信息.

每个注册客户应当有一个独特的 `name` 定义。 默认值 `name` 属性是 `CLICKHOUSE_DEFAULT`。该财产将用作注射标志.

### 与 ClickHouse 客户端交互

要与您刚刚注册的 ClickHouse 服务器交互, 请使用注射符注入您的课程 .

```typescript
constructor(
    @Inject('ANALYTICS_SERVER')
    private analyticsServer: ClickHouseClient
) {}
```

> 这个 `ClickHouseClient` 类别从 `@depyronick/nestjs-clickhouse`。 。 。 .

## 实例

> 这些只是几个例子,请参见: [@depyronick/ 点击之家- 客户端](https://github.com/depyronick/clickhouse-client) 用于更新方法,例如 **参数化查询能力**。 。 。 .

#### `ClickHouseClient.query<T>(query: string): Observable<T>`

```typescript
import { Inject, Injectable } from '@nestjs/common';
import { ClickHouseClient } from '@depyronick/nestjs-clickhouse';

interface VisitsTable {
  timestamp: number;
  ip: string;
  userAgent: string;
  os: string;
  version: string;
  // ...
}

@Injectable()
export class AppService {
  constructor(
    @Inject('ANALYTICS_SERVER')
    private readonly analyticsServer: ClickHouseClient,
  ) {
    this.analyticsServer
      .query<VisitsTable>('SELECT * FROM visits LIMIT 10')
      .subscribe({
        error: (err: any): void => {
          // called when an error occurred during query
        },
        next: (row): void => {
          // called for each row
          // the type of row property here is VisitsTable
        },
        complete: (): void => {
          // called when stream is completed
        },
      });
  }
}
```

#### `ClickHouseClient.queryPromise<T>(query: string): Promise<T[]>`

```typescript
import { Inject, Injectable } from '@nestjs/common';
import { ClickHouseClient } from '@depyronick/nestjs-clickhouse';

interface VisitsTable {
  timestamp: number;
  ip: string;
  userAgent: string;
  os: string;
  version: string;
  // ...
}

@Injectable()
export class AppService {
  constructor(
    @Inject('ANALYTICS_SERVER')
    private readonly analyticsServer: ClickHouseClient,
  ) {
    this.analyticsServer
      .queryPromise<VisitsTable>('SELECT * FROM visits LIMIT 10')
      .then((rows: VisitsTable[]) => {
        // all retrieved rows
      })
      .catch((err) => {
        // called when an error occurred during query
      });

    // or

    const rows = await this.analyticsServer.queryPromise(
      'SELECT * FROM visits LIMIT 10',
    );
  }
}
```

#### `ClickHouseClient.insert<T>(table: string, data: T[]): Observable<any>`

这个 `insert` 方法接受两个输入.

-   `table` 是您要插入数据的表格的名称.
    -   表格值可以使用数据库的前缀, 如 `analytics_db.visits`。 。 。 .
-   `data: T[]` 要插入的 JSON 对象数组.

```typescript
import { Inject, Injectable } from '@nestjs/common';
import { ClickHouseClient } from '@depyronick/nestjs-clickhouse';

interface VisitsTable {
  timestamp: number;
  ip: string;
  userAgent: string;
  os: string;
  version: string;
  // ...
}

@Injectable()
export class AppService {
  constructor(
    @Inject('ANALYTICS_SERVER')
    private readonly analyticsServer: ClickHouseClient,
  ) {
    this.analyticsServer
      .insert<VisitsTable>('visits', [
        {
          timestamp: new Date().getTime(),
          ip: '127.0.0.1',
          os: 'OSX',
          userAgent:
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/95.0.4638.69 Safari/537.36',
          version: '1.0.0',
        },
      ])
      .subscribe({
        error: (err: any): void => {
          // called when an error occurred during insert
        },
        next: (): void => {
          // currently next does not emits anything for inserts
        },
        complete: (): void => {
          // called when insert is completed
        },
      });
  }
}
```

## 多个客户端

您可以在同一应用程序中注册多个客户端如下:

```typescript
@Module({
  imports: [
    ClickHouseModule.register([
      {
        name: 'ANALYTICS_SERVER',
        host: '127.0.0.1',
        password: '7h3ul71m473p4555w0rd',
      },
      {
        name: 'CHAT_SERVER',
        host: '192.168.1.110',
        password: 'ch5ts3rv3Rp455w0rd',
      },
    ]),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
```

然后你可以使用这些服务器的指定注射符进行交互.

```typescript
constructor(
    @Inject('ANALYTICS_SERVER')
    private analyticsServer: ClickHouseClient,

    @Inject('CHAT_SERVER')
    private chatServer: ClickHouseClient
) { }
```

## Async 注册和Async 供应商

例如,如果您想要等待应用程序接受新的连接,直到从同步目标收到点击之家所需的配置设置,您就可以使用 `registerAsync` 方法.

```typescript
import { Inject, Module } from '@nestjs/common';
import { ClickHouseModule } from '@depyronick/nestjs-clickhouse';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: ['.development.env'],
      isGlobal: true,
    }),
    ClickHouseModule.registerAsync({
      useFactory: (config: ConfigService) => {
        return {
          host: config.get('CH_HOST'),
          database: config.get('CH_DB'),
          password: config.get('CH_PWD'),
          username: config.get('CH_USERNAME'),
        };
      },
      inject: [ConfigService],
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}
```

那你可以用这个 `CLICKHOUSE_ASYNC_INSTANCE_TOKEN` 输入 `ClickHouseClient` 与您刚刚提供的同步配置.

```typescript
import {
  ClickHouseClient,
  CLICKHOUSE_ASYNC_INSTANCE_TOKEN,
} from '@depyronick/nestjs-clickhouse';

export class AppModule {
  constructor(
    @Inject(CLICKHOUSE_ASYNC_INSTANCE_TOKEN)
    private readonly chWithAsyncConfig: ClickHouseClient,
  ) {
    this.chWithAsyncConfig
      .query('SELECT * FROM [TABLE] LIMIT 1')
      .subscribe((row) => console.log('row', row));
  }
}
```

你也可以使用这个 `InjectClickHouse` 帮助避免导入 `Inject` 直接 :

```typescript
import { ClickHouseClient, InjectClickHouse } from '@depyronick/nestjs-clickhouse';

export class AppModule {
  constructor(
    @InjectClickHouse()
    private readonly chWithAsyncConfig: ClickHouseClient,
  ) {}
}
```

如果您注册了名客户端,请将其名称传给 `InjectClickHouse('ANALYTICS_SERVER')`。 。 。 .

如果您想要定义多个 `ClickHouseClient` 使用 `registerAsync` 方法,您需要创建不同的模块,并注入 `CLICKHOUSE_ASYNC_INSTANCE_TOKEN` 输入特性模块.

不过你不用用 `registerAsync` 创建同步的方法 `ClickHouseClient` 实例。 您也可以使用自定义提供者 :

```typescript
import { Inject, Module } from '@nestjs/common';
import { ClickHouseClient } from '@depyronick/nestjs-clickhouse';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: ['.development.env'],
      isGlobal: true,
    }),
  ],
  controllers: [],
  providers: [
    {
      provide: 'CH2',
      useFactory: (config: ConfigService) => {
        return new ClickHouseClient({
          host: config.get('CH2_HOST'),
          database: config.get('CH2_DB'),
          password: config.get('CH2_PWD'),
          username: config.get('CH2_USERNAME'),
        });
      },
      inject: [ConfigService],
    },
  ],
})
export class AppModule {
  constructor(
    @Inject('CH2')
    private readonly clickhouse: ClickHouseClient,
  ) {
    this.clickhouse
      .query('SELECT * FROM [TABLE] LIMIT 1')
      .subscribe((row) => console.log('row', row));
  }
}
```

通过自定义提供者,您可以创建尽可能多的同步加载客户端并使用您的名称 `provide`(单位:千美元).

## 页:1

-   将积极维持和改进这一储存库.
-   计划执行 TCP 协议,如果 ClickHouse 决定 [文档](https://clickhouse.com/docs/en/interfaces/tcp/ "documentate") 这个.
-   计划执行带有流的插入.
-   这个库支持http响应压缩,如brotli,gzip和deflate等.

## 支助

Nest是麻省理工学院许可的开源项目. 它可以增长多亏赞助商和惊人的支持者的支持. 如果你想加入他们,请 [这里读更多](https://docs.nestjs.com/support)。 。 。 .

## 保持联系

-   作者 - 翻译 [阿里·德米尔奇](https://github.com/depyronick)

## 许可证

[麻省理工学院执照](https://npmcn.com/package/%40depyronick/nestjs-clickhouse/LICENSE)。 。 。 .

## 常见问题

### @depyronick/nestjs-clickhouse 是什么？

点击 NestJS 的住房客户端模块

### 如何安装 @depyronick/nestjs-clickhouse？

在项目目录运行 npm install @depyronick/nestjs-clickhouse，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@nestjs/common（^10\.0\.0 \|\| ^11\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @depyronick/nestjs-clickhouse 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @depyronick/nestjs-clickhouse 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @depyronick/nestjs-clickhouse 可以商用吗？

@depyronick/nestjs-clickhouse 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @depyronick/nestjs-clickhouse 的下载量有多少？

根据 npm 官方下载统计，@depyronick/nestjs-clickhouse 在 2026/10/12 – 2026/11/10 这 30 天内被下载 3,526 次，日均约 118 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @depyronick/nestjs-clickhouse 还在维护吗？

最新版本 2\.1\.0 发布于 2026/01/21（9 个月前）；至今共发布 17 个版本，其中过去 12 个月发布了 1 个；首次发布于 2021/11/12。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

