Jitsu Functions 能做什么?

Jitsu Functions 让你在事件写入数据仓库之前,用 JavaScript 修改、过滤或增强事件数据。它运行在 JavaScript 运行时环境中,可以调用 npm 包、库和键值存储,适合需要自定义数据处理逻辑的团队。如果你只是想把网站事件原样搬进仓库,不需要它;如果你要在入库前做去重、发通知、补字段这类加工,它就是 Jitsu 里最值得关注的部分。

它在数据管道里的位置

Jitsu 的定位是 warehouse-first:把数据仓库当作数据的唯一真实来源,Jitsu 负责尽快把事件送进去。Functions 就插在“事件产生”和“事件入库”之间。

流程可以理解为:

  1. 从网站、应用、API、CRM 等来源捕获事件
  2. 事件进入 Jitsu
  3. Functions 在这里执行——修改、过滤或增强事件
  4. 处理后的数据写入你选择的数据仓库

这意味着加工发生在入库前,仓库里存的是已经处理过的数据,而不是先入库再清洗。

具体能做什么

官方给出的能力是三类:修改(modify)、过滤(filter)、增强(augment)。落到实际场景:

  • 去重:判断某个用户是否已经注册过,避免重复处理
  • 触发外部动作:比如新用户注册时向 Slack 发一条通知
  • 字段加工:在写入前补充、改写或剔除事件字段
  • 按条件过滤:只让符合条件的事件进入仓库

一个来自官方文档的例子:当事件类型是 identify 时,用键值存储检查该邮箱是否已经注册过。如果已注册,只记一条日志;如果是新用户,写入标记并向 Slack 发送消息。

export default async function(event, { log, props, store }) {
  if (event.type === "identify") {
    if (await store.set(`signup/${event.traits.email}`)) {
      log(`User ${event.traits.email} already signed up`);
    } else {
      await store.set(`signup/${event.traits.email}`, true);
      await fetch(`https://slack.com/api/chat.postMessage`, {
        method: "POST",
        body: JSON.stringify({
          token: props.SLACK_TOKEN,
          channel: props.CHANNEL_ID,
          text: `Hooray! We have new user ${event.traits.email}`
        })
      });
    }
  }
}

这个例子同时用到了键值存储(store)、日志(log)、配置参数(props)和外部 API 调用(fetch),基本覆盖了 Functions 的典型用法。

为什么用 JavaScript 运行时

Functions 跑在 JavaScript 运行时环境里,这带来两个直接好处:

  • 可以用 npm 生态:需要解析、校验、转换数据时,直接引入现成的包,不用自己从头写
  • 有键值存储:可以跨事件保存状态,去重、计数、标记“已处理”这类逻辑才成立

对已经有 JavaScript 开发能力的团队,这意味着学习成本低,现有工具和代码片段大多能直接复用。

什么情况下值得用

适合用 Functions 的信号:

  • 事件入库前需要按业务规则加工,而不是原样存储
  • 需要跨事件维护状态(去重、限流、累计)
  • 需要在数据到达仓库的同时触发外部动作
  • 团队有 JavaScript 能力,愿意维护自定义逻辑

可能不需要的情况:

  • 只需要标准的事件采集和入库,没有加工需求
  • 团队没有开发资源维护自定义函数
  • 加工逻辑更适合放在仓库内用 SQL 完成

和普通采集方式的区别

维度 仅用 Jitsu 采集 配合 Functions
数据形态 事件原样入库 入库前已加工
去重/状态 需在仓库内处理 可在入库前处理
外部触发 需另建链路 可在函数内直接调用
维护成本 低 需要维护 JavaScript 代码
灵活度 受限于内置能力 可调用 npm 生态

选择的关键在于:加工逻辑放在入库前还是入库后。放在入库前,仓库里的数据更干净,下游分析不用重复清洗;代价是要维护函数代码。

上手前需要知道的

  • Functions 是 Jitsu 功能的一部分,具体可用范围以官方文档为准
  • 函数里可以访问 log、props、store 等运行时能力,写代码前先确认当前版本支持哪些
  • 涉及外部 API 调用(如 Slack)时,令牌等敏感信息应通过配置传入,不要硬编码在函数里
  • 键值存储适合轻量状态,不适合当数据库用

如果你的目标是让数据在进入仓库前就符合业务要求,Jitsu Functions 提供了一条用 JavaScript 实现自定义逻辑的路径;如果只是搬运数据,先用基础采集能力即可。

jitsu.com
Capture event data from websites, apps, and servers with Jitsu, then stream clean customer data into warehouses and tools in real time for analytics.