> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chaintable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Notebook 是什么

> Notebook 是驱动，不是用来做数据探索的。

在其他数据平台里，Notebook 通常是给你临时探索数据用的沙箱。**在 Chaintable 里，Notebook 是生产级驱动逻辑跑的地方。**

## 它负责什么

Notebook 里的代码决定：

* 盯哪张表的新块
* 什么时候提交一个计算任务
* 出错了怎么办、要不要重试

真正的转换逻辑（"这一行数据怎么变成另一行"）是单独的 [Function](/indexing/functions/overview)——写在 Notebook 代码里的一个普通 Python 函数，通过 `Trigger` 传给平台执行。

```python theme={null}
from blockx import Pipeline, Trigger, SOURCE_ROW

def to_transfer(record, chain_id):      # ← Function：算什么
    ...

pipe = Pipeline(
    triggers=[Trigger(table="chain.trace.eth", func=to_transfer, params=[SOURCE_ROW, "eth"])],
    target_table="myspace.transfers.eth",
)
pipe.update()                            # ← Notebook 里的驱动代码：什么时候算
```

## 和 Function 的分工

<Columns cols={2}>
  <Card title="Notebook：什么时候算" icon="notebook-pen">
    决定盯哪张表、从哪个高度开始、什么时候提交任务、出错了怎么处理。跑在一个常驻或定时拉起的运行时里。
  </Card>

  <Card title="Function：算什么" icon="function">
    纯粹的转换逻辑，一行进一行出。跑在隔离沙箱里，被大规模并行执行。
  </Card>
</Columns>

<Tip>
  同一个转换函数可以既被实时管道调用（`pipe.update()`），也被历史回填调用（`pipe.backfill()`）——区别只在 Notebook 侧怎么喂数据，Function 本身不用改。
</Tip>

## 环境里有什么

打开一个 Notebook，`blockdb`、`blockx`、`chaintable`、`leafage` 这几个 SDK 包已经可以直接 `import`，不需要安装。运行时实际带了哪些库见 [可用的库](/indexing/notebooks/libraries)。

## 写完之后怎么运行

Notebook 里的代码可以交互式跑（调试用），也可以发布成正式的[调度任务](/indexing/run/schedule)长期运行。
