在 Snowflake Notebooks 中开发和运行代码

本主题介绍如何在 Snowflake Notebooks 中编写和运行 SQL、Python 和 Markdown 代码。

笔记本单元格基础知识

本部分介绍一些基本单元格操作。当您 创建笔记本 时,会显示三个示例单元格。您可以修改这些单元格或者添加新的单元格。

创建新单元格

Snowflake Notebooks 支持三种类型的单元格:SQL、Python 和 Markdown。要创建新单元格,您可以将鼠标悬停在现有单元格上或滚动到笔记本的底部,然后选择要添加的其中一个单元格类型按钮。

在笔记本底部添加新的单元格按钮。

您可以在创建单元格后随时使用以下两种方法之一更改其语言:

移动单元格

您可以通过使用鼠标拖放单元格或使用操作菜单来移动单元格:

  1. (选项 1)将鼠标悬停在要移动的现有单元格上。选择单元格左侧的 |drag-drop|(拖放)图标,然后将单元格移动到新位置。

  2. (选项 2)选择垂直省略号 |vertical-ellipsis|(操作)菜单。然后选择适当的操作。

备注

要在单元格之间移动焦点,请使用 向上向下 箭头。

删除单元格

要删除单元格,请在笔记本中完成以下步骤:

  1. 选择垂直省略号 |vertical-ellipsis|(更多操作)菜单。

  2. 选择 Delete

  3. 再次选择 Delete 以确认。

您也可以使用 键盘快捷键 来删除单元格。

使用 Python 和 SQL 单元格时的注意事项,请参阅 运行笔记本的注意事项

在 Snowflake Notebooks 中运行单元格

要在 Snowflake Notebooks 中运行 Python 和 SQL 单元格,您可以:

  • 运行单个单元格:频繁更新代码时请选择此选项。

    • 在 Mac 键盘上按 CMD + return,或在 Windows 键盘上按 CTRL + Enter

    • 选择 仅运行此单元格Run this cell only

  • 按顺序运行笔记本中的所有单元格:在演示或共享笔记本之前选择此选项,以确保收件人看到最新的信息。

    • 在 Mac 键盘上按 CMD + shift + return,或在 Windows 键盘上按 CTRL + Shift + Enter

    • 选择 Run all

  • 运行单元格并前进到下一个单元格:选择此选项可以运行单元格并更快地前进到下一个单元格。

    • 在 Mac 键盘上按 shift + return,或在 Windows 键盘上按 Shift + Enter

    • 选择垂直省略号 |vertical-ellipsis|(更多操作)单元格,然后选择 Run cell and advance

  • 运行上述全部:运行引用早期单元格结果的单元格时选择此选项。

    • 选择垂直省略号 |vertical-ellipsis|(更多操作)单元格,然后选择 Run all above

  • 运行以下全部:运行后续单元格所依赖的单元格时选择此选项。此选项运行当前单元格和所有后续单元格。

    • 选择垂直省略号 |vertical-ellipsis|(更多操作)单元格,然后选择 Run all below

当一个单元格正在运行时,其他运行请求将排队,并将在当前正在运行的单元格完成后执行。

检查单元格状态

单元格运行的状态由单元格显示的颜色表示。此状态颜色显示在两个位置:单元格的左侧边框和右侧的单元格导航图中。

单元格状态颜色:

  • 蓝点:该单元格已被修改但尚未运行。

  • 红色:该单元格在当前会话中运行,并且发生了错误。

  • 绿色:该单元格在当前会话中运行,没有错误。

  • 移动绿色:该单元格当前正在运行。

  • 灰色:该单元格已在上一次会话中运行,显示的结果来自上一次会话。上一次交互式会话的单元格结果将保留 7 天。交互式会话意味着用户在 Snowsight 中以交互方式运行笔记本,而不是按照计划或 EXECUTE NOTEBOOK SQL 命令运行。

  • 灰色闪烁:选择 Run All 后,单元格正在等待运行。

备注

Markdown 单元格不显示任何状态。

单元格运行完成后,运行所花费的时间将显示在单元格的顶部。选择此文本可查看运行详细信息,包括开始和结束时间以及总耗时。

SQL 单元格包含其他信息,例如用于运行查询的仓库、返回的行以及指向查询 ID 页面的超链接。

单元格运行详细信息窗口。

停止正在运行的单元格

要停止执行当前正在运行的任意代码单元格,请选择单元格右上角的 Stop。您还可以选择笔记本页面右上角的 Stop。单元格正在运行时,Run all 变成 Stop

这会停止执行当前正在运行的单元格以及所有已计划运行的后续单元格。

使用 Markdown 格式化文本

要将 Markdown 包含在笔记本中,请添加一个 Markdown 单元格:

  1. 使用 键盘快捷键 并选择 Markdown,或选择 + Markdown

  2. 选择 Edit markdown 铅笔图标或双击单元格,开始编写 Markdown。

您可以输入有效的 Markdown 来格式化文本单元格。键入时,格式化的文本会显示在 Markdown 语法下方。

Markdown 单元格的屏幕截图,显示带有 H1 标头的 Markdown 文本,标头“An example Markdown cell”前有 #, 后跟正文“This is an example Markdown cell in a Snowflake Notebook”。在原始 Markdown 内容下方,呈现的 Markdown 以不同的字体显示。

要仅查看格式化的文本,请选择 Done editing 复选标记图标。

仅显示渲染的 Markdown 的 Markdown 单元的屏幕截图:标头“An example Markdown cell” 正文“This is an example Markdown cell in a Snowflake Notebook”。

备注

Markdown 单元格目前不支持 HTML 渲染。

Markdown 基础知识

本部分介绍基本的 Markdown 语法,帮助您入门。

标头

标题级别

Markdown 语法

示例

顶级

# Top-level Header
Copy
Markdown 中的标题一

2 级

## 2nd-level Header
Copy
Markdown 中的标题一

3 级

### 3rd-level Header
Copy
Markdown 中的标题一

内联文本格式

文本格式

Markdown 语法

示例

斜体

*italicized text*
Copy
Markdown 中的斜体文本

粗体

**bolded text**
Copy
Markdown 中的粗体文本

链接

[Link text](url)
Copy
Markdown 中的链接

列表

列表类型

Markdown 语法

示例

有序列表

1. first item
2. second item
  1. Nested first
  2. Nested second
Copy
Markdown 中的有序列表

无序列表

- first item
- second item
  - Nested first
  - Nested second
Copy
Markdown 中的无序列表

代码格式

语言

Markdown 语法

示例

Python

```python
import pandas as pd
df = pd.DataFrame([1,2,3])
```
Copy
Markdown 中的 Python 代码片段

SQL

```sql
SELECT * FROM MYTABLE
```
Copy
Markdown 中的 SQL 代码片段

嵌入图像

文件类型

Markdown 语法

示例

图像

![<alt_text>](<path_to_image>)
Copy
Markdown 中的嵌入图像

有关演示这些 Markdown 示例的笔记本,请参阅视觉数据故事笔记本中的 Markdown 单元格 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Visual%20Data%20Stories%20with%20Snowflake%20Notebooks/Visual%20Data%20Stories%20with%20Snowflake%20Notebooks.ipynb) 部分。

了解单元格输出

运行 Python 单元格时,笔记本会在结果中显示单元格的以下输出类型:

  • 写入控制台的任何结果,例如日志、错误、警告以及来自 print() 语句的输出。

  • 使用 Streamlit 的交互式表 (https://docs.streamlit.io/develop/api-reference/data/st.dataframe), st.dataframe() 时自动打印 DataFrames。

    • 支持的 DataFrame 显示类型包括 pandas DataFrame、Snowpark DataFrames 和 Snowpark Tables。

    • 对于 Snowpark,会立即评估已打印的 DataFrames,无需运行 .show() 命令。如果您不想立即评估 DataFrame,例如,在非交互模式下运行笔记本时,Snowflake 建议删除 DataFrame 打印语句来加快 Snowpark 代码的整体运行时。

  • 可视化效果在输出中呈现。要了解有关数据可视化的更多信息,请参阅 Snowflake Notebooks 中的可视化数据

此外,您可以在 Python 中访问 SQL 查询的结果,反之亦然。请参阅 在 Snowflake Notebooks 中引用单元格和变量

单元格输出限制

仅 10,000 行或 8 MB 的 DataFrame 输出显示为单元格结果,以较低者为准。然而,整个 DataFrame 仍可在笔记本会话中使用。例如,即使未渲染整个 DataFrame,您仍然可以执行数据转换任务。

每个单元格最多允许 20 MB 的输出。如果单元格输出的大小超过 20 MB,输出将会删除。如果发生这种情况,请考虑将内容拆分为多个单元格。

在 Snowflake Notebooks 中引用单元格和变量

您可以在笔记本单元格中引用前一个单元格结果。例如,引用 SQL 单元格的结果或者 Python变量的值,请参阅下表:

备注

引用的单元格名称区分大小写,并且必须与所引用单元格的名称完全匹配。

在 Python 单元格中引用 SQL 输出:

引用单元格类型

当前单元格类型

引用语法

示例

SQL

Python

cell1

将 SQL 结果表转换为 Snowpark DataFrame。

如果在名为 cell1 的 SQL 单元格有如下内容:

SELECT 'FRIDAY' as SNOWDAY, 0.2 as CHANCE_OF_SNOW
UNION ALL
SELECT 'SATURDAY',0.5
UNION ALL
SELECT 'SUNDAY', 0.9;
Copy

您可以引用单元格来访问 SQL 结果:

snowpark_df = cell1.to_df()
Copy

将结果转换为 pandas DataFrame:

my_df = cell1.to_pandas()
Copy

引用 SQL 代码中的变量:

重要

在 SQL 代码中,您只能引用类型 string 的 Python 变量。您不能引用 Snowpark DataFrame、pandas DataFrame 或其他 Python 原生 DataFrame 格式。

引用单元格类型

当前单元格类型

引用语法

示例

SQL

SQL

{{cell2}}

例如,在名为 cell1 的 SQL 单元格中,引用来自 cell2 的单元格结果:

SELECT * FROM {{cell2}} where PRICE > 500
Copy

Python

SQL

{{variable}}

例如,在名为 cell1 的 Python 单元格中:

使用 Python 变量作为值

c = "USA"
Copy

您可以在名为 cell2 的 SQL 单元格中引用变量 c 的值,通过将其用单引号括起来以确保其被视为一个值:

SELECT * FROM my_table WHERE COUNTRY = '{{c}}'
Copy

使用 Python变量作为标识符

如果 Python 变量表示 SQL 标识符(如列名或表名):

column_name = "COUNTRY"
Copy

如果 Python 变量表示 SQL 标识符,例如列名或表名 (column_name = "COUNTRY"),您可以直接引用变量,而无需使用引号:

SELECT * FROM my_table WHERE {{column_name}} = 'USA'
Copy

确保区分用作值(带引号)和用作标识符(不带引号)的变量。

注意:不支持引用 Python DataFrames。

运行笔记本的注意事项

  • 笔记本以调用方权限运行。有关其他注意事项,请参阅 更改笔记本的会话上下文

  • 您可以导入 Python 库以在笔记本中使用。有关详细信息,请参阅 导入 Python 包以在笔记本中使用

  • 在 SQL 单元格中引用对象时,您必须使用完全限定的对象名称,除非您引用的是指定数据库或架构中的对象名称。请参阅 更改笔记本的会话上下文

  • 笔记本草稿每三秒钟保存一次。

  • 您可以使用 Git 集成来维护笔记本版本。

  • 您可以配置空闲超时设置,以便在满足设置后自动关闭笔记本会话。有关信息,请参阅 空闲时间和重新连接

  • 笔记本单元格结果仅对运行笔记本的用户可见,并在会话之间缓存。重新打开笔记本会显示用户上次使用 Snowsight 运行笔记本时的结果。

  • BEGIN ...END (Snowflake Scripting) 在 SQL 单元格中不受支持。相反,在 Python 单元格中使用 Session.sql().collect() 方法运行脚本块。链接 sql 调用与 collect 调用以立即执行 SQL 查询。

    以下代码使用 session.sql().collect() 方法运行 Snowflake Scripting 块:

    from snowflake.snowpark.context import get_active_session
    session = get_active_session()
    code_to_run = """
    BEGIN
        CALL TRANSACTION_ANOMALY_MODEL!DETECT_ANOMALIES(
            INPUT_DATA => SYSTEM$REFERENCE('TABLE', 'ANOMALY_INFERENCE'),
            TIMESTAMP_COLNAME =>'DATE',
            TARGET_COLNAME => 'TRANSACTION_AMOUNT',
            CONFIG_OBJECT => {'prediction_interval': 0.95}
        );
    
        LET x := SQLID;
        CREATE TABLE ANOMALY_PREDICTIONS AS SELECT * FROM TABLE(RESULT_SCAN(:x));
    END;
    """
    data = session.sql(code_to_run).collect(block=True);
    
    Copy
语言: 中文