# @deltastream/pulumi-deltastream 中文文档

规范地址：https://npmcn.com/package/%40deltastream/pulumi-deltastream/

版本：1\.0\.3
npm 元数据更新时间：2026-09-09T19:33:15.910Z
中文译文更新时间：2026-11-11T21:56:18.830Z
软件包许可：未声明

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

原始 npm 页面：https://www.npmjs.com/package/%40deltastream/pulumi-deltastream
原文对照：https://npmcn.com/package/%40deltastream/pulumi-deltastream/?lang=original
项目主页：https://www.deltastream.io/

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

- 包体积（解压后）：163 kB，91 个文件
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2025-06-27T14:20:47.681Z
- 最新版本发布：2026-09-09T19:33:15.707Z
- 近 30 天下载量：8103（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：21（近 12 个月 11 个）

## 中文简介

管理DeltaStream资源的普鲁米供应商.

## 安装

```sh
npm install @deltastream/pulumi-deltastream
```

也可以使用：`pnpm add @deltastream/pulumi-deltastream`、`yarn add @deltastream/pulumi-deltastream`、`bun add @deltastream/pulumi-deltastream`

## README

# Pulumi DeltaStream 供应商

管理DeltaStream资源的普鲁米供应商.

## 概览

Pulumi 的 DeltaStream 供应商允许您使用基础设施作为代码来管理 DeltaStream 资源 。 DeltaStream是一流数据平台,可以进行实时分析与处理.

此提供者支持 :

-   **数据库** - 用于计划和关系的逻辑容器
-   **命名空间** - 数据库内的Schema命名空间
-   **存储** - 外部数据储存(卡夫卡、克尼斯等)
-   **对象** - 关系(结构/变化/表)
-   **查询** - 连续输入查询(单一汇)
-   **应用** - 有虚拟关系的多汇流应用程序

## 安装

### 类型脚本/ Java 脚本( 节点. js)

```bash
npm install @deltastream/pulumi-deltastream
```

### 走开

```bash
go get github.com/deltastreaminc/pulumi-deltastream/sdk/go/deltastream
```

## 配置

提供方配置镜像为基础的DeltaStream SQL驱动程序所使用的环境变量.

| Pulumi 配置键 | 环境变量 | 说明 | 需求 |
| --- | --- | --- | --- |
| `server` | `DELTASTREAM_SERVER` | 基础服务器 URL( 如. [https://api.deltastream.io/v2 (英语)](https://api.deltastream.io/v2)(中文(简体) ) | 对 |
| `apiKey` | `DELTASTREAM_API_KEY` | API 密钥/ 密钥认证 | 是(除非通过掩体提供) |
| `organization` | `DELTASTREAM_ORGANIZATION` | 组织名称或 UUID | 没有 |
| `role` | `DELTASTREAM_ROLE` | 执行语句的作用为( 默认服务器侧) | 没有 |
| `insecureSkipVerify` | `DELTASTREAM_INSECURE_SKIP_VERIFY` | 跳过 TLS 校验( dev/测试) | 没有 |
| `sessionId` | `DELTASTREAM_SESSION_ID` | 自定义会话 ID (帮助关联日志) | 没有 |

示例(环境变量):

```bash
export DELTASTREAM_SERVER="https://api.deltastream.io/v2"
export DELTASTREAM_API_KEY="<your key>"
```

或者Pulumi config(建议保密):

```bash
pulumi config set deltastream:server https://api.deltastream.io/v2
pulumi config set --secret deltastream:apiKey <your key>
```

## 示例使用

### 类型脚本

```typescript
import * as pulumi from "@pulumi/pulumi";
import * as deltastream from "@deltastream/pulumi-deltastream";

const provider = new deltastream.Provider("deltastream", {
    server: process.env.DELTASTREAM_SERVER!,
    apiKey: process.env.DELTASTREAM_API_KEY!,
});

// Create a database and a namespace
const db = new deltastream.Database("example_db", { name: "example_db" }, { provider });
const ns = new deltastream.Namespace("example_ns", { database: db.name, name: "example_ns" }, { provider });

// Invoke lookups
const dbInfo = db.name.apply(n => deltastream.getDatabase({ name: n }, { provider }));
const namespaces = db.name.apply(d => deltastream.getNamespaces({ database: d }, { provider }));

export const dbCreatedAt = db.createdAt;
export const nsCreatedAt = ns.createdAt;
export const namespaceCount = namespaces.apply(r => r.namespaces.length);
```

### 走开

```go
package main

import (
    ds "github.com/deltastreaminc/pulumi-deltastream/sdk/go/pulumi-deltastream"
    "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    "os"
)

func main() {
    pulumi.Run(func(ctx *pulumi.Context) error {
        prov, err := ds.NewProvider(ctx, "deltastream", &ds.ProviderArgs{
            Server: pulumi.String(os.Getenv("DELTASTREAM_SERVER")),
            ApiKey: pulumi.String(os.Getenv("DELTASTREAM_API_KEY")),
        })
        if err != nil { return err }

        db, err := ds.NewDatabase(ctx, "db", &ds.DatabaseArgs{ Name: pulumi.String("example_db") }, pulumi.Provider(prov))
        if err != nil { return err }

        ns, err := ds.NewNamespace(ctx, "ns", &ds.NamespaceArgs{ Database: db.Name, Name: pulumi.String("example_ns") }, pulumi.Provider(prov))
        if err != nil { return err }

        ctx.Export("dbCreatedAt", db.CreatedAt)
        ctx.Export("nsCreatedAt", ns.CreatedAt)
        return nil
    })
}
```

### 流出查询

DeltaStream 支持两种流式查询资源:

#### 1\. 查询资源

这个 `Query` 资源是用于简单的 INSERT INT 查询, 并使用单个汇 :

**类型脚本 :**

```typescript
const query = new deltastream.Query("myQuery", {
    sourceRelationFqns: [source.fqn],
    sinkRelationFqn: sink.fqn,  // Single sink
    sql: pulumi.interpolate`INSERT INTO ${sink.fqn} SELECT * FROM ${source.fqn};`,
}, { provider });
```

**开始:**

```go
q, err := ds.NewQuery(ctx, "myQuery", &ds.QueryArgs{
    SourceRelationFqns: pulumi.StringArray{ source.Fqn },
    SinkRelationFqn:    sink.Fqn,  // Single sink
    Sql: pulumi.Sprintf("INSERT INTO %s SELECT * FROM %s;", sink.Fqn, source.Fqn),
}, pulumi.Provider(prov))
```

#### 2\. 应用程序资源(多链接)

这个 `Application` 资源是用于复杂的流化应用,包括:

-   **多语种服务组织** 目标不同的汇
-   **虚拟中间关系** (CREATE VIRTALSTREAM/变相)
-   **复杂的处理逻辑** 包含连接、窗口和集合

**关键特性 :**

-   虚拟关系是应用的内在关系,不要创造出卡夫卡主题
-   只需宣布物理源和汇为附属物
-   虚拟关系自动被排除在依赖跟踪之外

**类型脚本 :**

```typescript
// 1. Create physical source and sink relations OUTSIDE the application
const pageviews = new deltastream.DeltaStreamObject("pageviews", {
    database: db.name,
    namespace: "public",
    store: kafkaStore.name,
    sql: pulumi.interpolate`CREATE STREAM pageviews (...) WITH ('topic'='pageviews');`,
}, { provider });

const visitFreq = new deltastream.DeltaStreamObject("visitFreq", {
    database: db.name,
    namespace: "public",
    store: kafkaStore.name,
    sql: pulumi.interpolate`CREATE CHANGELOG visit_freq (...) WITH ('topic'='visit_freq');`,
}, { provider });

// 2. Create APPLICATION with virtual relations and INSERT INTO
const app = new deltastream.Application("myApp", {
    sourceRelationFqns: [pageviews.fqn],      // Physical sources only
    sinkRelationFqns: [visitFreq.fqn],        // Physical sinks only
    sql: pulumi.interpolate`
        BEGIN APPLICATION my_app
            -- Virtual relation (no Kafka topic, internal only)
            CREATE VIRTUAL STREAM virtual.public.filtered AS
                SELECT * FROM ${pageviews.fqn}
                WHERE userid IS NOT NULL;
            
            -- Insert into physical sink
            INSERT INTO ${visitFreq.fqn}
                SELECT window_start, window_end, userid, count(*) as cnt
                FROM TUMBLE(virtual.public.filtered, SIZE 30 SECONDS)
                GROUP BY window_start, window_end, userid;
        END APPLICATION;
    `,
}, { provider, dependsOn: [pageviews, visitFreq] });
```

**开始:**

```go
// 1. Create physical source and sink relations OUTSIDE the application
pageviews, err := ds.NewDeltaStreamObject(ctx, "pageviews", &ds.DeltaStreamObjectArgs{
    Database:  db.Name,
    Namespace: pulumi.String("public"),
    Store:     kafkaStore.Name,
    Sql: pulumi.Sprintf("CREATE STREAM pageviews (...) WITH ('topic'='pageviews');"),
}, pulumi.Provider(prov))

visitFreq, err := ds.NewDeltaStreamObject(ctx, "visitFreq", &ds.DeltaStreamObjectArgs{
    Database:  db.Name,
    Namespace: pulumi.String("public"),
    Store:     kafkaStore.Name,
    Sql: pulumi.Sprintf("CREATE CHANGELOG visit_freq (...) WITH ('topic'='visit_freq');"),
}, pulumi.Provider(prov))

// 2. Create APPLICATION with virtual relations and INSERT INTO
app, err := ds.NewApplication(ctx, "myApp", &ds.ApplicationArgs{
    SourceRelationFqns: pulumi.StringArray{ pageviews.Fqn },  // Physical sources only
    SinkRelationFqns:   pulumi.StringArray{ visitFreq.Fqn },  // Physical sinks only
    Sql: pulumi.Sprintf(`
        BEGIN APPLICATION my_app
            -- Virtual relation (no Kafka topic, internal only)
            CREATE VIRTUAL STREAM virtual.public.filtered AS
                SELECT * FROM %s
                WHERE userid IS NOT NULL;
            
            -- Insert into physical sink
            INSERT INTO %s
                SELECT window_start, window_end, userid, count(*) as cnt
                FROM TUMBLE(virtual.public.filtered, SIZE 30 SECONDS)
                GROUP BY window_start, window_end, userid;
        END APPLICATION;
    `, pageviews.Fqn, visitFreq.Fqn),
}, pulumi.Provider(prov))
```

**重要注释 :**

-   虚拟关系不得包括在 `sourceRelationFqns` 或者说 `sinkRelationFqns`
-   仅应宣布实际关系(与实际的Kafka专题)为依存关系
-   提供者验证虚拟关系没有被错误地声明为依赖性

完整的示例见:

-   [实例/应用程序](https://npmcn.com/package/%40deltastream/pulumi-deltastream/examples/application-go/) - 满了 以多个汇为例
-   [实例/应用程序](https://npmcn.com/package/%40deltastream/pulumi-deltastream/examples/application-ts/) - 有多个汇的完整类型脚本示例

## 发展

### 资源

提供者包括下列资源:

| 资源 | 说明 | 使用大小写 |
| --- | --- | --- |
| `Database` | 逻辑数据库容器 | 与集团有关的计划和关系 |
| `Namespace` | 数据库中的Schema 命名空间 | 组织关系 |
| `Store` | 外部数据存储连接( Kafka, Kinesis等) | 连接数据源 |
| `DeltaStreamObject` | 物理关系(STREAM/Changelog/表) | 用 Kafka 主题创建物理数据结构 |
| `Query` | 连续INSERT 输入查询 | 简单的单沉相流转换 |
| `Application` | 多汇流程序 | 具有多汇和虚拟关系的复杂应用程序 |

### 查询 vs 应用程序: 每个应用程序何时使用

**使用 `Query` 当:**

-   你有一个简单的Insert进入... SELECT查询
-   单源和单汇
-   不需要虚拟中间关系
-   直向转变

**使用 `Application` 当:**

-   以不同汇为目标的多种 " INSERT O " 声明
-   需要虚拟中间关系(CREATE VIRTUAL STREAM/CHANGELOG)
-   组合、窗口和聚合的复杂处理
-   想要将相关查询组织成一个单一的逻辑单位

### 查询资源字段注释

查询资源支持后向兼容的后向字段名称:

-   **`sinkRelationFqn`** (弦声, **已贬值**:用于与单沉INSERT INTO查询的后向兼容性
-   **`sinkRelationFqns`** (弦声), **已贬值**:用于遗留应用查询

**建议:** 对于新代码 :

-   使用 `Query` 用于简单的 INSERT 查询的资源
-   使用 `Application` 多汇流应用程序的资源

**为什么改变?** 新的 `Application` 资源提供:

-   类型安全应用特定验证
-   查询和应用程序之间的明确区分
-   开发者在专门领域的更好经验
-   虚拟关系依赖关系的自动验证

**移徙:** 现有的查询资源仍在继续工作。 见 [变动情况](https://npmcn.com/package/%40deltastream/pulumi-deltastream/CHANGELOG.md) 移民指南.

### 先决条件

-   前进1.24+
-   Pulumi CLI( 单独安装; CI 通过 `pulumi/actions`(中文(简体) )
-   节点.js(仅在工作/验证节点SDK时)
-   可选: Yarn 为更快的节点构建

Pulumi CLI不再由Makefile自动安装(用于供应链安全). 手动安装或通过您的软件包管理器安装 :

```bash
curl -fsSL https://get.pulumi.com | sh   # (optional quick start; prefer package managers or pinned action in CI)
# or on macOS
brew install pulumi
```

该寄存器使用环境变量在 CI 中标出一个 CLI 版本 `PULUMI_CLI_VERSION` (见 `.github/workflows/ci.yml`) (中文(简体) ). 如果遇到计划生成差异,请检查本地 `pulumi version` 并符合这一价值.

### 建设提供者

```bash
make build
```

### 运行测试

```bash
make test
```

### 生成 SDK

```bash
make build_sdks
```

### 可用 Make 目标

-   `build` - 构建提供者二进制
-   `schema` - 生成提供者计划(需要Pulumi CLI在场)
-   `generate` - 生成所有语言 SDKs(nodejs, go, python)
-   `build_sdks` - 构建全部 SDK( 系统编译)
-   `install_sdks` - 在当地安装/链接SDK以促进发展
-   `test` 运行实例集成测试( 需要已建的提供者 & Pulumi CLI)
-   `clean` - 删除已建的已生成的 SDK( E)
-   `help` - 显示帮助消息

目标故意避免隐含地下载工具;确保Pulumi CLI在运行计划或生成目标之前在您的 PATH 上.

## 项目结构

```
.
├── cmd/
│   └── pulumi-resource-deltastream/    # Provider binary entry point
├── provider/                           # Provider implementation
├── sdk/                               # Generated SDKs
│   ├── go/
│   └── nodejs/
├── examples/                          # Example programs
│   ├── application-go/               # Go APPLICATION example (multi-sink)
│   ├── application-ts/               # TypeScript APPLICATION example (multi-sink)
│   ├── query-go/                     # Go Query example (single sink)
│   └── query-ts/                     # TypeScript Query example (single sink)
├── schema.json                        # Provider schema
├── Makefile                          # Build automation
└── README.md                         # This file
```

## 许可证

这个项目根据Apache许可证2.0获得许可——见 [自由主义](https://npmcn.com/package/%40deltastream/pulumi-deltastream/LICENSE) 详细文件.

## 支助

支助和问题:

-   [GitHub 问题](https://github.com/deltastreaminc/pulumi-deltastream/issues)
-   [DeltaStream 文档](https://docs.deltastream.io/)
-   [Pulumi 文档](https://www.pulumi.com/docs/)

## 常见问题

### @deltastream/pulumi-deltastream 是什么？

管理DeltaStream资源的普鲁米供应商\.

### 如何安装 @deltastream/pulumi-deltastream？

在项目目录运行 npm install @deltastream/pulumi-deltastream，或使用 pnpm add / yarn add / bun add。

### @deltastream/pulumi-deltastream 支持 TypeScript 吗？

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

### @deltastream/pulumi-deltastream 可以商用吗？

@deltastream/pulumi-deltastream 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @deltastream/pulumi-deltastream 的下载量有多少？

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

### @deltastream/pulumi-deltastream 还在维护吗？

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

