
近期我深入体验了在 Web 界面中使用 Snowflake Notebooks 的功能。虽然如今我不常使用笔记本工具,但这次体验令我十分满意——Snowflake 平台的操作便捷性令人欣喜。本文将通过一个实验案例快速介绍如何追踪沙盒 Snowflake 账户中的查询统计信息,该账户是 Chase Romano、Kirk Mason 和我用来做高频测试的账户。本笔记本的目标是计算过去十天内查询历史记录中的总字节扫描量、删除量与写入量。
我们开始吧
我们将在 Snowflake Web 界面(Snowsight)中创建新的容器笔记本。
当前在 Snowsight 中创建笔记本的界面
在 Snowsight 中创建容器笔记本
安装 Ibis 并配置 PyPI 网络访问权限
我们需要安装所需的工作库(本例中为 Ibis)。Snowflake 提供了预定义的托管网络规则 SNOWFLAKE.EXTERNAL_ACCESS.PYPI_RULE 来实现此功能。更多信息建议参阅以下文档:
在笔记本环境中,假设已完成网络集成配置,接下来安装带 Snowflake 后端依赖的 Ibis 库。
在笔记本中安装 Ibis
导入所有依赖项并建立连接
如果之前的安装成功,我们现在应能导入必要模块,并使用 get_active_session 函数连接至 Snowflake,同时让 Ibis 将其引用为连接对象。
倒入及连接设置
编写表达式
我们将对“user_name”、“start_time”、“bytes_scanned”、“bytes_written”和 “bytes_deleted”列进行投影与运算。
以下是对这些表达式实现功能的(尽可能)简化说明:
引用 SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY 视图;
将这些列名转换为小写形式以更符合“Pythonic”风格;
仅提取所需列并通过选择操作重新引用;
根据以下条件筛选查询:由 Chase、Kirk 或我通过“user_name” 列执行的查询、字节相关列任意值大于 0 的查询,以及查询起始时间在最近十日内的记录;
将 start_time 列截断至小时粒度,并在小时级别对字节相关列进行求和。
Snowflake 笔记本中的列与表表达式
在上述操作中,我们应将延迟处理的字节列运算显式转换为整型。虽然它们本身已是整型,但在生产环境中进行类型转换会更安全。此时,您可能会想到……
关于直接使用 SQL 的经典迷因
幸运的是,我们确实拥有这个选项,并且能够将其编译为不同方言。
编译表表达式
需要注意的是,并非所有操作都能被完全编译,因为某些后端可能不支持特定数据类型。例如 Snowflake 支持的 VARIANT 或 ARRAY 等复杂数据类型,可能无法在 SQLite 中直接兼容。
检查工作
Ibis 采用惰性计算模式(默认设置,我们也可启用交互模式),因此我们尚未实际处理底层查询。换言之,我们还未执行该表达式并物化结果。我们可以在笔记本中运行几个单元来预览输出,并将结果物化到 pandas 中进行后续处理。
预览与描述 Ibis 数据框架及物化至 pandas
结果可视化
现在我需要询问 Kirk 和 Chase 他们近期的工作进展!
过去 10 天的查询结果
结论
Snowflake 容器笔记本通过将逻辑拆分为列表达式,提供了便捷的数据处理与变更测试方式。您也可以对此进行任务调度,但建议在部署到生产环境前移除部分“交互式”单元。
原文地址:
点击链接立即报名注册:Ascent - Snowflake Platform Training - China








评论