热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Snowflake+Python]Python中如何使用Snowflake

Snowflake+Python使用场景:自动化构建数据管道以及在预处理后将数据存储到Snowflake中.SnowflakeSetup:11.登录: https:www.snow

Snowflake + Python

使用场景:自动化/构建数据管道以及在预处理后将数据存储到Snowflake中.


Snowflake Setup:

11.登录: https ://www.snowflake.com/

输入详细信息并申请 30 天试用,通过 Gmail 验证。
在试用中,Snowflake 将提供足够的积分来开始使用。

2.下载雪花 CLI:

Redirecting to … icon-default.png?t=M0H8https://docs.snowflake.net/manuals/user-guide/snowsql-install-config.html


注意:Snowflake 的所有服务都有很好的文档。查看此用户指南以获得更详细的理解 (Redirecting to … icon-default.png?t=M0H8https://docs.snowflake.net/manuals/user-guide.html


与雪花互动

Snowflake 有 2 种方式可以与服务交互:

Web 界面: Snowflake 提供了一个 Web 界面,其中包括在 Snowflake 中执行创建、修改和管理帐户和资源等操作的工具。

Web 界面
的限制:“put”命令不能通过 Web 界面运行。
湾。无法加载大于 50MB 的文件,因为它旨在用于小文件。

CLI:如果您是 Linux 用户,则该界面易于使用,并填补了 Web 界面的这些空白。


为表演搭建舞台(如果您熟悉 Snowflake 的设计流程,请跳过)



雪花的架构

Snowflake 的独特架构由三个关键层组成:
1. 集中式存储
2. 多集群计算和处理
3. 云服务



集中存储

当数据加载到 Snowflake 中时,它会将数据重新组织为 Snowflake 内部优化、压缩的列格式。Snowflake 将这些优化的数据存储在云存储中。Snowflake 管理如何存储这些数据的所有方面。


查询处理

每个虚拟仓库都是一个独立的计算集群,不与其他虚拟仓库共享计算资源。因此,每个虚拟仓库对其他虚拟仓库的性能没有影响。


云服务

该层内的服务包括:


  • 验证
  • 基础设施管理
  • 元数据管理
  • 查询解析和优化
  • 访问控制

使用不同的权限,管理不同的数据库。因此,用户的角色对于执行某些任务是必不可少的。


设置 Python 和代码依赖项

参考:https ://docs.snowflake.net/manuals/user-guide/python-connector-install.html

确保安装了 Python 3.x 和所需的模块。

为 Snowflake 安装 Python 包:

pip install — upgrade snowflake-connector-python

py 脚本以非常简单的方式编写,没有花哨的类或方法。

代码(git repo):hashmapinc / oss / python_snowflake_poc · GitLab
(这包括 Jupyter notebook)

注意:repo 还包含 Docker 映像和文件。暂时不要担心,因为这不是我们本次练习的重点。


1. 导入包

“cred.json” -> 包含用户信息的 JSON 文件,以避免在代码中写入敏感信息。我将 JSON 加载到 dict 类型的“cred”变量中,如下所示:

# import require module and credential
import snowflake.connector
import json
with open(“cred.json”,”r”) as f:
cred = json.load(f)
创建“cred.json” JSON文件并写入或者你可以使用用于创建 JSON 的 Json 转储:
{
“userid”:”userid”,
“password”:”xxxxx”,
“account”:”px00000.ap-southeast-2”
}



2. 通过 Python 设置与 Snowflake 的连接

cOnn= snowflake.connector.connect(
user=cred["userid"],
password=cred["password"],
account=cred["account"],
session_parameters={
"QUERY_TAG": "EndOfMonthFinance",
}
)
print( “连接成功”,conn)

您还可以通过在连接后执行 SQL 语句 ALTER SESSION SET ... 来设置会话参数:

con.cursor().execute("ALTER SESSION SET QUERY_TAG = 'EndOfMonthFinancials'")
"""


3. 将当前角色更改为“ SYSADMIN”,因为默认可能不是 SYSADMIN。这对于执行将要执行的操作很重要。

conn.cursor().execute("使用角色 sysadmin")

4.设置雪花存储和管理数据:

使用“ CREATE OR REPLACE” -> 用于新建和覆盖
使用“CREATE” -> 用于新建(如果存在则创建时出错)
或使用IF NOT EXISTS

# 创建数据库、模式和仓库
conn.cursor().execute("CREATE WAREHOUSE IF NOT EXISTS tiny_warehouse_mg")
conn.cursor().execute("CREATE DATABASE IF NOT EXISTS testdb_mg")
conn.cursor().execute ("USE DATABASE testdb_mg")
# 上面的行必须在下面的行之前执行,因为在构建 WH 的 testschema_mg 基本结构时,DB 应该存在
conn.cursor().execute("CREATE SCHEMA IF NOT EXISTS testschema_mg")

5.设置当前需求WH、DB、Schema。

# 使用数据库、模式和仓库
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg" )
conn.cursor().execute("使用 SCHEMA testdb_mg.testschema_mg")

6.创建一个2列的新表;一个 int 类型和另一个 string 类型

# 创建表并插入数据
conn.cursor().execute(
"CREATE OR REPLACE TABLE "
"test_table(col1 integer, col2 string)" )

7.让我们在上表中插入2条记录

这里我们使用字符串连接。与 Python 中的任何其他 DB 连接器一样,我们也可以使用元组来防止SQL 注入

# Bad query:
conn.cursor().execute(
"INSERT INTO test_table(col1, col2) VALUES " +
" (123, 'indian Cricket'), " +
" (100, 'Kapil Dev')")
安全方法:
# 安全示例。做这个!
conn.cursor().execute("INSERT INTO test_table(col1, col2) VALUES (%s, %s)", ('123', 'indian Cricket'));

8. 将 Python 与 Snowflake 一起使用

您必须先在雪花数据存储中加载数据,然后才能对该数据运行查询。为了正确管理它,我们有一个暂存区域和模式类型来帮助我们以所需的严格格式提取数据。下面的代码将帮助我们加载目录名称“data”中存在的 CSV 文件。在暂存它们之后,我们将复制文件内容或将数据转储到我们创建的表(test_table)中。

如果您使用的是Window 的 cmd,则必须提供类似(“\\”)的路径
:( “PUT file://.\\data\\crick* @testdb_mg.testschema_mg.%test_table”)

对于 S3 或任何其他云存储,需要类似的代码。

注意:'put' 是从 CLI 中使用的,并确保有访问权限,提到的路径。

# Putting Data
# @DB .SCHEMA.TABLE ,这是根据内容的层次结构。like DB <- SCHEMA <- Table
# 如果使用 Window 的 cmd : ("PUT file://.\\data\\crick* @testdb_mg .testschema_mg.%test_table")
conn.cursor().execute("PUT file: //./data/crick* @testdb_mg .testschema_mg.%test_table")
conn.cursor().execute("""COPY INTO test_table from @testdb_mg .testschema_mg.%test_table/crick*.csv.gz
file_format = (type = csv field_delimiter=',')
模式 = '.*.csv.gz'
on_error= 'skip_file'""")
# 对于 S3
# 复制数据
# con.cursor().execute("""
# COPY INTO testtable FROM s3:///data/
# CREDENTIALS = (
# aws_key_id='{aws_access_key_id}',
# aws_secret_key=' {aws_secret_access_key}')
# FILE_FORMAT=(field_delimiter=',')
# """.format(
#aws_access_key_id=AWS_ACCESS_KEY_ID,
#aws_secret_access_key=AWS_SECRET_ACCESS_KEY))

9. 我们现在在表格中有数据

# 查询数据
cur = conn.cursor()
try:
cur.execute("SELECT col1, col2 FROM test_table ORDER BY col1")
for (col1, col2) in cur:
print('{0}, {1}'.format (col1, col2))
finally:
cur.close() # 为系统稳定性避免不必要的连接
print("connection closed, script end.. Thanks ")
# 如果结果集太大而无法放入内存,则使用 fetchone 或 fetchmany。
# 结果 = conn.cursor().execute("SELECT col1, col2 FROM test_table").fetchall()

转载: https://medium.com/hashmapinc/getting-started-with-snowflake-using-python-8ec552ffd02



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
处男是你_909
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有