Notebook 基础开发

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

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

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

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

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

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

  • 已创建个人开发环境实例。Notebook在开发环境调试运行需要依赖个人开发环境实例。

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

操作步骤:

image

  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 在开发和生产环境中行为一致的关键。

开发环境 vs. 生产环境

对比项

开发环境

生产环境

运行载体

个人开发环境实例

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

核心差异

使用个人独占的开发实例,您可以在其中自由安装 Python 库进行调试。

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

如何保障一致

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

重要

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

计算资源与内核

  • 计算资源:指 Notebook 连接的后端计算引擎,如 MaxCompute、EMR Serverless Spark 等。SQL 单元格必须绑定一个计算资源来执行。

  • Python 内核:指执行 Python 代码的后端环境。在 DataWorks Notebook 中,这通常是您的个人开发环境实例。您可以通过 Magic Command(如 %odps)在 Python 代码中建立与计算资源的连接,从而提交任务或操作数据。

目录类型与适用场景

您创建 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

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单元格需要的依赖,无法正常使用。

相关文档