MaxFrame Notebook 是 MaxCompute AI数据探索客户端内置的 Python 数据加工模块。支持用 pandas 风格的代码编写大数据加工作业,在客户端里逐段运行、看到每一步的输出和写入的表,也可以用一句话让 AI 写完整个作业。
功能概述
MaxFrame 是 MaxCompute 的分布式 Python 计算框架,API 与 pandas 高度兼容,但计算在 MaxCompute 上完成,因此能处理远超单机内存的数据量。
在客户端里,无需本地安装 Python 环境、也不需要配置 AccessKey:新建一个 Notebook 就能直接写代码运行,凭证按当前连接自动注入。

适用场景
多步数据加工:抽取、清洗去重、脱敏、派生字段、写入结果表,用一个 Notebook 串起完整链路。
SQL 不好写的逻辑:正则批量处理、复杂字符串加工、按行自定义计算、跨列派生等,用 Python 更直观。
多模态数据处理:配合 Blob 列类型,批量处理表中存储的图片、音频、视频。
AI 自动生成:描述清楚「读哪张表、做什么、写到哪张表」,由 AI 生成代码、自动检查并跑通。
功能一览
功能 | 说明 |
Notebook 编辑 | Python 与 Markdown 两种单元格,支持插入、删除、上下移动、代码高亮 |
分段运行 | 可以运行全部单元格,也可以只运行改动的那一格 |
结果查看 | 每格下方展示输出日志、进度条、以及本格写入表的数据预览 |
静态检查 | 运行前检查常见问题(漏调 |
运行历史 | 保留每格的历史运行记录,可回看任意一次的结果 |
AI 协作 | 在 Notebook 内让 AI 生成、修复、解释代码;或在 AI 对话里一句话生成整个作业 |
前提条件
已安装并启动MaxCompute AI数据探索客户端。
已配置好数据连接,并选中了要使用的 MaxCompute 项目。左侧栏的 MaxFrame 分区在没有活动连接时不显示。
当前连接的账号有目标项目的读写权限(写结果表需要建表和写入权限)。
使用 AI 功能前,需在设置 > AI 配置中填好 API URL、API Key 和模型名称。
快速入门
下面以「读一张明细表,清洗去重后写入结果表」为例。
步骤一:新建 Notebook
在左侧栏找到 MaxFrame 分区,单击右侧 +,填写名称(例如 mf_my_pipeline)后单击创建 Notebook。创建成功后自动打开编辑器。也可以从统一的新建文件对话框中选择 MaxFrame 类型创建。
同一个项目下 Notebook 名称不能重复。如果提示创建失败,请换个名称或先删除同名的旧草稿。
步骤二:AI 生成代码
单击编辑器顶部的 AI 续写,右侧 AI 助手面板会切到 MaxFrame 作业助手。在输入框里描述需求,例如:
读 project_with_dr.sales_detail,去掉重复记录、过滤掉金额为空的行,
按天汇总销售额和订单数,写入 project_with_dr.sales_daily。
每一步用独立单元格,并在 Markdown 单元格里写明步骤名。AI 会先读取当前 Notebook,然后生成代码。
步骤三:确认应用
AI 改动 Notebook 前会弹出确认卡片,展示修改内容以及修改原因:
单击应用到 Notebook:代码写入 Notebook,编辑器立即刷新,AI 接着自动做一次检查。
单击取消:本次改动不生效,拒绝后可以重新生成。
应用后如果不满意,直接继续说,例如「把去重改成只按订单号去重」,AI 记得前面的上下文。
步骤四:检查
单击顶部的检查,客户端会扫描代码里的常见问题,结果显示在底部面板的 Advisor 标签里。
单击某条问题的定位到可以跳到对应代码行;也可以直接单击让 Agent 修复全部,交给 AI 改。
步骤五:运行与写表
单击工具栏的运行,客户端将从上到下依次执行所有 Python 单元格,并在顶部显示执行进度(如"正在运行单元格 3/5")。
to_odps_table(...).execute()执行完成后,结果即写入 MaxCompute 表,无需额外的发布或部署步骤。运行结束后,可在单元格下方预览写入的表数据。
如果只修改了某个单元格,无需重新执行全部单元格,在该单元格的工具栏单击运行单元格即可。
编写 Notebook
单元格类型
Notebook 用注释标记划分单元格,本质上还是普通的 Python 文件:
标记 | 类型 | 用途 |
| Python | 可执行的加工代码 |
| Markdown | 步骤说明、假设、注意事项,不参与执行和检查 |
编辑器顶部会显示当前 Notebook 的单元格构成,例如 8 个单元格 · 3 个 Markdown · 5 个 Python。
编辑操作
功能 | 操作方式 |
加一个单元格 | 单元格之间和末尾的添加条上,单击 Python 或 Markdown |
改代码 | 单元格工具条上单击编辑代码单元格,改完单击预览回到渲染态 |
改说明文字 | 直接单击 Markdown 区域即可编辑 |
调整顺序 | 单元格工具条上的上移单元格 / 下移单元格 |
删除 | 单元格工具条上的删除单元格(至少保留一个 Python 单元格) |
运行这一格 | 单元格工具条上的运行单元格 |
内容自动保存,顶部会显示 未保存 / 保存中 / 已保存 状态。检查和运行前都会先保存。
在左侧栏的 Notebook 上单击右键,还可以加入聊天(把代码作为附件发给 AI)、复制名称、删除。
代码组织规则
每个单元格独立编译执行,但变量在单元格间共享。需注意如下两条规则:
规则一:每个单元格内的代码块必须语法完整。
try/finally、if、for、def等语句块不得跨单元格拆分,否则将报语法错误。# ✗ 错误:try 和 finally 被拆到两格# %%try: result.execute() # %%finally: session.destroy()# ✓ 正确:完整放在同一格# %%try: result.execute() finally: session.destroy()规则二:变量可跨单元格使用。
前序单元格中定义的变量(如
session、df)可在后续单元格中直接引用,无需重复定义。AI 自动生成的代码已遵循上述两条规则,手动编写时请留意。
若单元格最后一行为表达式,其值将自动输出,便于快速查看结果(与 Jupyter 行为一致)。
完整示例
# %% [markdown]# ## 步骤 1:创建 session# MaxFrame 需要显式创建 session,作业结束时释放。# %%import maxframe.dataframe as md
from maxframe.session import new_session
session = new_session()
# %% [markdown]# ## 步骤 2:读表并清洗# 去重 + 过滤空金额。# %%
df = md.read_odps_table("project_with_dr.sales_detail")
clean = df.dropna(subset=["amount"]).drop_duplicates(subset=["order_id"])
# %% [markdown]# ## 步骤 3:按天汇总并写入结果表# %%
daily = clean.groupby("stat_date").agg({"amount": "sum", "order_id": "count"})
daily.columns = ["total_amount", "order_count"]
try:
md.to_odps_table(daily, "project_with_dr.sales_daily", overwrite=True).execute()
finally:
session.destroy()
注意事项:
MaxFrame 采用惰性执行机制,未调用
execute()时计算不会实际提交。overwrite=True表示每次全量覆盖结果表;若表不存在,则自动创建。execute()与session.destroy()须通过try/finally封装在同一单元格内,确保资源正确释放。请勿在代码中硬编码 AccessKey。凭证已根据当前连接自动注入,需要 PyODPS 时直接调用
ODPS.from_environments()即可获取已鉴权的入口。
运行与查看结果
运行方式
方式 | 入口 | 适用场景 |
运行全部 | 顶部运行 | 完整跑一遍。会先重置运行状态,从干净的环境开始 |
运行单格 | 单元格工具条运行单元格 | 只改了某一格,复用前面已经算好的变量做增量调试 |
运行中顶部会出现取消按钮。同一个 Notebook 同时只能有一个任务在跑,重复触发会提示该草稿已有运行中的任务,等它结束或取消后再试即可。
查看单元格输出
每格运行后,下方分三个标签展示结果:
标签 | 内容 |
输出 | 代码打印的日志,可展开、收起、复制 |
目标表 | 这一格写入的表的数据预览 |
控制台 | 错误信息和进度条 |
目标表预览:客户端会自动识别这一格写入了哪张表,写完后在目标表标签里直接看数据。可以切换看前 20 / 50 / 100 行、刷新,或单击外链图标打开完整的表详情。
回看历史:同一格跑过多次时,右上角会出现一个选择器,按时间和状态切换查看之前某一次的结果。每格保留最近 10 次。输出区顶部还会显示本次运行的耗时、Instance ID 和 打开 LogView 链接,需要排查 MaxCompute 侧问题时可直接跳转。
底部面板
编辑器下方有三个标签,可以整体折叠:
运行详情:分为摘要、标准输出、控制台、DAG 四个子标签。摘要里看本次运行的状态与耗时,失败时会标出失败位置并提供让 Agent 修复按钮。
历史:这个 Notebook 的全部运行记录(时间、模式、状态、耗时),失败的标红,可展开看详情。
Advisor:最近一次检查发现的问题列表。
检查作业
单击顶部检查,客户端会在不真正跑作业、不消耗计算资源的前提下扫描 Python 代码(Markdown 内容不参与检查),提前发现写 MaxFrame 容易踩的坑,主要覆盖四类:
作业跑不出结果:漏建 session、漏调
execute()、session 清理时机不对。MaxFrame 是懒执行的,这类问题会让作业看似正常结束但实际什么都没做。性能与成本风险:读分区表没限定范围导致全表扫描、把大结果集拉回本地、用逐行处理应对大规模数据。
安全问题:代码里硬编码了密钥。凭证已由客户端自动注入,不需要也不应该写在草稿里。
产出不完整:作业没有任何写表动作,只做分析时可以忽略,要交付结果表时则需补上。
AI 作业开发
客户端提供两种 AI 协作方式,根据当前所处界面选择即可。
方式一:在 Notebook 里用 AI 修改代码
打开 Notebook 后单击 AI 续写,右侧面板进入 MaxFrame 作业助手。空会话时提供三个快捷操作:
快捷操作 | 执行 |
生成 Notebook 作业 | 生成完整作业:Markdown 写说明、Python 写逻辑,然后自动检查并申请运行 |
检查并修复 | 排查代码、session 生命周期、 |
解释当前作业 | 讲清楚输入表、关键变换、输出表和潜在风险,不改代码 |
两类确认卡片,涉及副作用的操作都需要人工确认:
改代码:展示改动摘要和理由,单击应用到 Notebook 生效,单击取消拒绝。
要运行:告知会重置运行状态并跑完全部 Python 单元格、可能消耗计算资源或写入数据,单击运行 Notebook 才真正执行。
等确认期间输入框会锁定。AI 回复过程中可以随时停止,停止后对话上下文完整保留,可以接着补充或改需求。
对话历史保存在服务端,单击面板顶部的时钟图标可以找回之前的会话,单击 + 开始新对话。
方式二:在 AI 对话里一句话生成作业
如果加工只是一个更大分析任务里的一环,直接在 AI 对话(AI Query)中描述需求即可,无需手动建 Notebook。例如:
用 MaxFrame 把 project_with_dr.sales_detail 按天聚合销售额和订单数,写入 project_with_dr.sales_daily,
然后基于 sales_daily 画出最近 30 天的销售额趋势图。AI 会自己判断这里面有一段 MaxFrame 加工任务,把它交给一个专门的子任务去完成,然后拿着结果表继续画图。
子任务写好代码后,MaxFrame Notebook 页面自动打开(在对话右侧栏,或中间区域的标签页)。
代码和运行过程逐格实时显示,效果和手动单击运行相同。
任务失败时,子任务会读报错、自行修改代码重跑,直到成功,无需逐轮介入。
右侧栏的子 Agent 列表里能看到这个作业的状态,单击可以随时跳回对应的 Notebook。
对于建表、写表、INSERT/UPDATE 等数据变更操作,建议通过 MaxFrame 子任务执行。在主对话通道中,这类操作会触发逐条确认,中断交互流程;交由 MaxFrame 子任务执行时,代码在 MaxFrame 运行时中运行,过程完整可见、可取消、可续跑,完成后自动返回输出表名供后续步骤直接引用。
子任务完成后,AI 可基于返回的表名继续执行 SQL 查询、生成图表或添加到 Dashboard,无需手动传递表名。
若作业中途被打断,AI 会主动告知,可指示其继续未完成的作业。也可随时取消,取消操作将立即终止子任务。