Notebook 基础开发

更新时间:
复制为 MD 格式

DataWorks Notebook 提供一个交互式、模块化的数据分析与开发环境。您可以使用 Python、SQL 和 Markdown 单元格,连接 MaxCompute、EMR、AnalyticDB 等多种计算引擎,实现从数据处理、探索性分析、可视化到模型开发的全链路任务。本文档将指导您如何高效使用 Notebook 完成数据开发与调度任务。

快速入门:5分钟运行您的第一个Notebook

本节将引导您完成一个最简流程:创建一个 Notebook,使用 Python 传递参数给 SQL,并查询 MaxCompute 表数据。

开始前,请确保您已满足以下条件:

  • 当前工作空间已开通并使用新版数据开发(Data Studio)

  • 已创建Serverless 资源组。Notebook在生产环境运行需要依赖Serverless资源组。

  • 已创建个人开发环境实例。如果您使用包含Python单元格的Notebook,在开发环境调试运行时需要依赖个人开发环境实例。

    如果您尚未创建,请参见创建个人开发环境实例

操作步骤:

  1. 创建 Notebook 节点

    1. 进入 Data Studio,在数据开发项目目录下,新建 Notebook 节点。

    2. 为 Notebook 命名(例如 hello_notebook)并提交。

  2. 选择个人开发环境

    在顶部导航处单击个人开发环境,从下拉列表中选择您已创建的个人开发环境实例。

  3. 编写 Python 单元格以定义参数

    添加一个Python单元格,并输入以下代码。此步骤定义一个城市变量,用于后续的 SQL 查询。

    # 定义一个变量,用于后续SQL查询
    city = 'Beijing'
    print(f"已定义城市变量 city = {city}")
  4. 编写 SQL 单元格以查询数据

    1. 在第一个单元格下方,新增一个 SQL 单元格。

    2. 在单元格右下角,将 SQL 类型切换为 MaxCompute SQL

    3. 输入以下 SQL 代码。代码通过 ${city} 语法引用了上一步 Python 单元格中定义的 city 变量。

      -- 使用Python中定义的变量进行查询  
      SELECT '${city}' AS city;
  5. 运行并查看结果

    1. 单击 Notebook 上方工具栏的全部运行按钮。

    2. 观察每个单元格的运行情况:

      • Python 单元格下方会输出 已定义城市变量 city = Beijing

      • SQL 单元格下方会显示查询结果的表格。

至此,您已成功创建并运行一个包含 Python 和 SQL 交互的 Notebook。

核心概念

理解以下核心概念,是确保 Notebook 在开发和生产环境中行为一致的关键。

Notebook 模式

DataWorks Notebook 支持两种使用模式:

  • SQLMarkdown模式:仅包含 SQL 和 Markdown 单元格,适用于纯数据查询和文档编写场景。此模式下,无论是开发环境还是生产环境,都仅需 Serverless 资源组即可运行,不依赖个人开发环境实例。默认情况下为此模式,Notebook右上角显示为SQL内核

  • 完整模式(Python + SQL + Markdown):支持 Python、SQL 和 Markdown 单元格的混合使用,适用于需要数据处理、分析和可视化的复杂场景。在开发环境调试运行时,需要依赖个人开发环境实例来执行 Python 代码。请您选择个人开发环境后,Notebook右上角将显示为image(Python版本仅供参考)。

开发环境 vs. 生产环境

对比项

开发环境

生产环境

运行载体

个人开发环境实例

调度配置中指定的资源组镜像

核心差异

对于包含 Python 单元格的 Notebook,使用个人独占的开发实例,您可以在其中自由安装 Python 库进行调试。

对于仅包含 SQL 和 Markdown 单元格的 Notebook,仅需 Serverless 资源组即可运行。

无论是通过运维中心周期性调度,还是在 Data Studio 中手动触发工作流运行,任务都会在调度配置中指定的资源组上运行。其环境(如依赖库、网络等)完全由您选择的镜像和资源组配置决定。

如何保障一致

如果您在个人开发环境实例中通过 pip install 等方式进行了Python包的安装,为确保生产环境具备与开发环境相同的依赖,您需将个人开发环境制作DataWorks镜像,并在调度配置中选用该自定义镜像。

重要

网络连通情况说明:个人开发环境不绑定VPC时,默认绑定一个带宽有限的随机公网IP,可直接连通公网;但发布至生产环境的Notebook节点网络是跟随调度配置里配置的资源组。建议在个人开发环境中绑定调度配置的资源组,此时两者环境保持网络一致。

计算资源与内核

在 DataWorks Notebook 中,代码的执行由计算资源内核两个核心概念共同决定。

  • 计算资源:计算资源是负责最终执行和处理数据任务的后端计算引擎。它定义了任务运行的环境、计算能力和所遵循的执行逻辑。

    • 定义:一个独立的、可被调度的计算服务实例。例如:MaxCompute 项目、EMR Serverless Spark 集群等。

    • 作用:为 SQL 查询、Spark 作业等提供实际的算力。

    • 选择:您需要在执行任务时,明确将其绑定到一个具体的计算资源上。

  • 内核:内核是 Notebook 环境中负责解析并执行用户在代码单元格内所编写代码的组件。它决定了该单元格接受的编程语言。

    • Python 内核

      • 功能:执行 Python 语言编写的代码,支持数据处理、算法实现、任务调度等复杂逻辑。

      • 交互模式:在 Python 内核中,可以通过 Magic Command (如 %sql) 或 SDK 库,将封装好的计算任务(如一段 SQL 语句)提交给指定的计算资源执行,并能获取其返回结果用于进一步分析。

    • SQL 内核

      • 功能:直接解释和提交 SQL 语言编写的查询。

      • 交互模式:使用 SQL 内核时,它将 SQL 语句直接转发给用户为该单元格指定的后端计算资源(例如 EMR Spark SQL 或 MaxCompute SQL Session)来执行。

    • Markdown 内核

      • 功能:用于渲染 Markdown 格式的富文本文档,不执行任何计算逻辑。

关系总结:

  • 内核是前端的语言解释器,决定“写什么”(Python 或 SQL)。

  • 计算资源是后端的执行引擎,决定代码“在哪里运行”(在 MaxCompute 还是 Spark 上)。

目录类型与适用场景

您创建 Notebook 的位置决定其协作模式、权限和发布流程。

目录类型

适用场景

协作与发布

项目目录

团队协作与周期性生产任务。此目录下的节点是工作空间共享的,遵循标准的开发、提交、发布流程。

允许多人协作开发。节点需要发布到生产环境,才能被周期性调度。

个人目录

个人开发与调试。此目录对其他工作空间成员不可见,用于存放个人脚本和临时任务。

仅自己可见。若要被调度,需先提交到项目目录,再进行发布。

开发与调试 Notebook

重要
  • Data Studio默认不自动保存,建议您开发过程及时手动保存,避免丢失代码。您也可在Data Studio的编辑器设置 > Files: Auto Save中,设置为自动保存。

  • 若运行过程中卡顿或长时间无反应,可点击上方工具栏的重启按钮重启Notebook内核。

单元格管理

  • 添加单元格:将鼠标悬停在现有单元格的上方或下方边缘,单击出现的+ SQL等按钮。也可以使用顶部工具栏的按钮。

  • 切换单元格类型:单击单元格右下角的类型标识(如 Python),在弹出的菜单中选择新的类型,如 SQLMarkdown。切换类型时,单元格内的代码内容会保留,您需要手动修改以适应新类型。

  • 移动单元格:将鼠标悬停在单元格左侧的蓝色竖线上,按住并拖动即可调整顺序。

  • 运行单元格

    • 运行单个:单击单元格左侧的运行按钮。

    • 运行全部:单击 Notebook 顶部工具栏的全部运行按钮。

参数传递

Python 变量传递至 SQL

在 Python 单元格中定义的变量,可以在后续的 SQL 单元格中通过 ${变量名} 的格式直接引用。

示例:

  1. Python 单元格

    table_name = "dwd_user_info_d"
    limit_num = 10
  2. SQL 单元格

    SELECT * FROM ${table_name} LIMIT ${limit_num};

SQL 结果传递至 Python

当一个 SQL 单元格执行SELECT 查询后,其结果会自动生成一个 DataFrame 变量,可供后续的 Python 单元格使用。

重要

若存在多个SQL语句,仅会将最后一条SQL语句的结果存入DataFrame变量。

  • 变量命名:默认变量名为 df_ 开头,您可以单击 SQL 单元格左下角的变量名进行重命名。

  • 变量类型

    若支持多种变量类型,点击左下角DataFrame也切换类型。
    • 对于 MaxCompute SQL,支持Pandas DataFrameMaxCompute MaxFrame 对象。

    • 对于ADB Spark SQL,支持Pandas DataFramePySpark MaxFrame 对象。

    • 对于其他 SQL 类型,生成的是Pandas DataFrame对象。

示例:

image

查看血缘(Beta)

说明

支持地域:华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华北6(乌兰察布)、华南1(深圳)、西南1(成都)、中国香港。

当 Notebook 代码变得复杂,涉及多个数据表或文件的读写时,理解数据流向会变得困难。血缘分析功能通过静态解析Notebook 中的 Python(支持MaxFrame框架),快速理清数据的来龙去脉。

操作步骤

在 Notebook 的顶部工具栏,单击血缘按钮。系统会自动解析当前 Notebook 中所有单元格的代码,并在下方展示数据血缘关系图。

image

重要
  • 血缘分析是基于对 Notebook 代码的静态解析,它反映的是代码中描述的数据逻辑,而非任务运行后的实际数据流。因此,无需运行代码即可查看血缘。

  • 当前该功能主要用于开发和调试,分析出的血缘关系暂时不会自动上报至数据地图中。

  • 如果修改代码,需要再次单击血缘刷新按钮来获取最新的血缘关系图。

支持的场景

血缘分析功能当前仅支持以下场景:

  • MaxCompute 表间的血缘:当您从一张或多张 MaxCompute 表读取数据,经过 MaxFrame 处理后,再写入到另一张 MaxCompute 表时,系统能清晰地展示出表与表之间的加工关系。

    例如,将订单表(ods_order)和店铺维表(dim_shop)进行关联,并将结果写入到订单宽表(dwd_order)。

  • MaxCompute 表与外部数据的血缘: 当您在代码中处理 MaxCompute 表与外部数据(如绑定的数据集、OSS文件)的交互时,血缘分析能够清晰地展示它们之间的链路关系。

    • 通过绑定的数据集:当您在代码中通过个人开发环境的挂载路径(如 /mnt/data/)访问绑定的数据集,并与 MaxCompute 表进行数据交换时(例如,从数据集读取数据写入表,或从表读取数据写入数据集),血缘图中会展示两者之间的完整数据链路。

      image

    • 通过 OSS 路径:即使您没有绑定数据集,直接在代码中通过 OSS 路径读取或写入文件进行处理,血缘分析也能识别出 OSS 存储路径与 MaxCompute 表之间的双向数据流向。

      image

      说明

      如果该 OSS 路径恰好在数据地图中被注册为数据集,血缘图会自动将其展示为数据集节点,帮助您更好地进行资产管理。

Copilot 辅助编程

DataWorks Copilot 是内置的智能编程助手,可以帮助您生成和解释代码。

唤起方式

  • 在选择的单元格左上方单击 Copilot image图标。

  • SQL单元格内右键,选择 Copilot

  • 使用快捷键 Cmd+I (Mac) 或 Ctrl+I (Windows)。

调度与发布 Notebook

为了让 Notebook 能够按计划周期性运行,您需要进行调度配置并将其发布到生产环境。

1、配置调度参数(参数化调度)

如需每次调度运行时,Notebook 中的参数能动态变化(例如,按天处理不同分区的数据),可以设置参数化调度。

  1. 标记参数单元格: 在包含核心参数定义的 Python 单元格中,单击右上角的 ... 菜单,选择 Mark Cell as Parameters。该单元格会被添加一个 parameters 标签,表明它是调度任务的参数入口。

    image

  2. 配置调度参数

    1. 在 Notebook 右侧面板,单击调度配置

    2. 调度参数区域,为您在代码中定义的变量(如 var)赋值。

      image

当任务被调度系统自动执行时,代码中 var 参数的实际值,将由在调度参数中配置的值动态替换。

2、配置运行环境与资源

  1. 配置镜像:在调度配置中,选择一个包含 Notebook 运行所需全部依赖的镜像。这是确保生产环境成功运行的关键。

    重要

    如果您在个人开发环境实例中通过 pip install 等方式进行了Python包的安装,为确保生产环境具备与开发环境相同的依赖,您需将个人开发环境制作DataWorks镜像,并在调度配置中选用该自定义镜像。

  2. 配置资源组:选择用于执行任务的资源组。对于 Serverless 资源组,建议配置不超过 16CU,以避免因资源不足导致任务启动失败。单个任务最大支持 64CU

  3. 配置关联角色:如需进行细粒度的权限管控,可以为节点关联一个特定的 RAM角色,使其以该角色的身份运行。详情请参见配置节点关联角色

3、发布节点

只有项目目录下的节点才能被发布和周期性调度。

  • 对于项目目录下的 Notebook:完成配置后,单击顶部工具栏的发布按钮。

  • 对于个人目录下的 Notebook:需先单击保存按钮,将其提交到项目目录,然后再执行发布操作。

发布成功后,您可以在运维中心周期任务页面监控和管理您的 Notebook 任务。

常见问题

  • Q:为什么我的代码在开发时能访问公网,但调度运行时却失败了?

    A:这是因为开发环境和生产环境的网络策略不同。

    • 开发环境 (个人开发环境):为了方便调试,个人开发环境实例在未设置VPC的情况下,默认会提供有限的公网访问能力,让您可以临时安装包或调用API。

    • 生产环境 (周期调度任务): 出于安全和稳定考虑,默认在专有网络中运行,不能直接访问公网。任务的网络配置由您在调度配置中选择的资源组决定。如果该资源组所在VPC没有配置NAT网关,则无法访问公网。

    • 解决方案: 确保个人开发环境实例和Serverless资源组设置相同的VPC专有网络。

  • Q:为什么我的代码在开发环境时成功运行,但调度运行时却找不到三方包?

    A:请确保已将所有依赖包(如Python库)提前制作成自定义镜像,并在调度配置中指定该镜像。详情请参见个人开发环境制作DataWorks镜像

  • Q:我如何更换Python内核版本?

    A:可在个人开发环境的终端image手动安装需要Python版本,然后在Notebook工具栏右侧单击image按钮,切换其他Python内核版本。不推荐使用额外安装Python内核,因为新建版本不具备SQL单元格需要的依赖,无法正常使用。

相关文档