用Snowpark解决Advent of Code编程挑战(第一部分)
2024/12/2 21:03:04
本文主要是介绍用Snowpark解决Advent of Code编程挑战(第一部分),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这张照片由 Marina Dina 拍摄,来自 Unsplash(unsplash.com)
到了十二月,成千上万的开发者报名参加AoC,这是一系列每日一题的编程谜题,你可以用你选择的任何编程语言来解决。这是一个有趣的方式来提升或复习你的编程技能,或者了解一门新的编程语言。
以前,我用 SQL 和 PL/SQL 代码实现了 Advent of Code,然后改用 Python,而今年,我打算用 Snowpark 来挑战自己。Snowpark 是一组运行在 Snowflake(AI 数据云)上的库和代码执行环境,可以用来运行 Python。
在这一年的Advent of Code期间,我将撰写教程,介绍解谜的过程。我不能承诺每个谜题都会写教程,因为我还有自己的生活需要照顾,特别是在忙碌的假期。不过,我会尽可能在我的教程中介绍Snowpark的各种功能。
在2024年Advent of Code正式开始之前(12月1日午夜,即UTC-5时区的12月1日午夜),我们将从设置开发环境开始(本文将介绍)。在接下来的文章里,我们将通过解决去年挑战中的一个谜题来预热,以便您大致了解Snowpark是如何工作的。
搭建您的Snowflake环境配置让我们从显而易见的开始。你需要一个Snowflake账户才能使用Snowpark。你可以在这里(点击链接)注册一个免费试用,或者如果你已经有Snowflake账户的话,就直接使用它。
一旦我们获得了Snowflake账号的访问权限,我们就可以配置几个组件:一个数据库,一个模式,一个虚拟仓库,以及一个可以操作的角色。
登录到您的 Snowflake 账户后,打开一个 SQL 工作表页面。首先,您需要创建一个名为 AOC_DEVELOPER 的角色,并将该角色赋予您的用户名,这样您就可以使用该角色了:
-- 创建一个角色 use role useradmin; -- 注:useradmin 是一个管理用户的角色 create role aoc_developer; grant role aoc_developer to user <your username>;
然后创建名为 AOC2024_DB 的数据库,名为 AOC 的模式,创建名为 AOC_WH 的虚拟仓库并使用默认参数,授予 AOC_DEVELOPER 角色使用数据库和仓库的权限,以及模式的所有权限(因此 AOC_DEVELOPER 角色将能够在此模式中能够创建和管理所有类型的 Snowflake 对象)。
-- 创建一个数据库、一个架构和一个虚拟仓库(V warehouse) 切换到sysadmin角色; create database aoc2024_db; create schema aoc; create warehouse aoc_wh; -- 将数据库、架构和虚拟仓库的使用权限授予aoc_developer角色 grant usage on database aoc2024_db to role aoc_developer; 将架构aoc的所有权限授予aoc_developer角色; 将aoc_wh虚拟仓库的使用权限授予aoc_developer角色;搭建开发环境
你也需要 Python。撰写本文时,Python 的最新支持版本是 3.11(你可以在 Snowflake 文档 这里 查看到支持的 Python 版本)。为了使用 Snowpark,如果没有安装 Python 3.11,请安装这个版本。
你可以使用你喜欢的任何集成开发环境(IDE)。我将使用 Visual Studio Code,所以我将使用它。接着创建一个 Python 虚拟环境。如果你使用的是 conda,你可以用它来创建虚拟环境。我将使用 virtualenv。
python -m venv .venv
(该命令用于创建一个虚拟环境)
然后将此环境中的Python可执行文件设置为IDE中的Python解释器。在Visual Studio Code中,可以通过命令面板选择它。
在安装Snowpark库之前,请先检查您在Snowflake账户中的snowflake-snowpark-python
库的最新版本。在Snowflake的工作表中输入以下命令:
查询版本 在 information_schema.packages 中 其中 语言 = 'python' 并且 运行时版本 = '3.11' -- 你的 Python 版本 并且 包名 = 'snowflake-snowpark-python';
查找我Snowflake账户中的最新版本,版本号为1.24.0。使用_conda_或pip(我这里用的是pip)安装这个版本的Snowpark库。
pip install snowflake-snowpark-python[pandas]==1.24.0
[pandas]
这个依赖是可选的,仅当你需要处理 Pandas 数据框时才需要。我们先安装一下吧,以防万一,因为今年的谜题还没公布,但可能会发现它很有用。
接下来,你需要设置连接参数以便你可以从 Python 连接到 Snowflake。我建议使用密钥对认证(或者如果你使用的是 Snowflake 试用账号,你也可以仅使用用户名和密码,但既然这是一个 Snowpark 教程,你应该学会如何配置密钥对认证,以备将来使用)。
对于密钥对身份验证,您需要一个公钥和一个私钥。您可以使用 openssl
命令通过命令生成这些密钥,操作指南可以在 Snowflake 文档中找到 此处。为了简化,生成未加密的私钥并不使用密码。
一旦你获得密钥,回到一个Snowflake工作表,并将公钥分配给你的用户名(替换为你实际的以MII开头的公钥),如下所示:
-- 将你的公钥与用户名关联起来 use role accountadmin; alter user 你的用户名 set rsa_public_key = 'MII...';
设置连接到 Snowflake 的参数时,可以使用多种方式,例如通过环境变量等方式提供参数,也可以通过 JSON 对象或 .env 文件等方式。在本教程中,我们将使用 connections.toml 文件来设置连接参数。
进入你的主文件夹(~),并创建一个 .snowflake 文件夹(如果你之前使用过 Snowflake CLI 或 Visual Studio Code 的 Snowflake 插件,你可能已经创建过这个文件夹)。在 .snowflake 文件夹中(即 ~ 目录下的),如果还没有 connections.toml 文件,请创建一个名为 connections.toml 的文件(如果还没有的话)。
更多关于 connections.toml 文件的信息,可以在 Snowflake 文档 here 中找到。
添加一个名为 aoc_connection
的连接项,并设置参数,如雪flake账号名、用户名、私钥文件路径、角色、虚拟仓库、数据库和模式。使用密钥对认证时,请将认证器设置为 SNOWFLAKE_JWT(如果只使用用户名和密码进行登录,则跳过 authenticator
和 private_key_file
参数,改为添加密码参数)。
以下是从 connections.toml 文件中提取的信息:
[aoc_connection] account = "<你的 Snowflake 帐户>" user = "<你的用户名>" authenticator = "SNOWFLAKE_JWT" 保留原样 private_key_file = "<私钥文件路径>" role = "AOC_DEVELOPER" 保持原样 warehouse = "AOC_WH" 保持原样 database = "AOC2024_DB" 保持原样 schema = "AOC" 保持原样
在IDE中新建Python文件,然后从snowflake.snowpark
导入Session
。使用Session.builder.config
方法,将之前配置的“aoc_connection”作为参数传递。以下是用于创建Snowflake连接的Python代码:
from snowflake.snowpark import Session # 创建会话 session = Session.builder.config("connection_name", "aoc_connection").create()
当你执行这段代码时,如果你正确配置了所有设置,它应该能够正常运行(不会抛出错误)。不过,这段代码目前还没有任何实际作用,你可以通过添加一条 SQL 语句来测试它是否工作正常。例如,你可以添加以下 SQL 语句来检索并打印当前用户:
SELECT CURRENT_USER;
打印(session.sql('select current_user()').collect())
打印当前用户的会话信息:这段代码用于获取并打印当前用户的会话信息。
输出应该像这样:
[Row(CURRENT_USER()='<你的用户名这里填写>')]
如果你做到了这里,恭喜你!你的Snowpark环境已经准备好啦。敬请关注系列文章的下一篇,我们将会解决去年挑战中的一个谜题哦。
我是马雅 Ferle,Snowflake 数据大师,同时也是 In516ht 的高级顾问。你可以通过 LinkedIn 联系我,也可以在我的新书《Snowflake 数据工程》中了解更多信息。
这篇关于用Snowpark解决Advent of Code编程挑战(第一部分)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解
- 2024-12-20利用Gemini构建处理各种PDF文档的Document AI管道