Snowflake数据工程实战 三、数据预处理的最佳实践(1)
haoteby 2024-12-30 04:13 2 浏览
现在你已经完成了你的第一个数据工程管道,你已经准备好探索Snowflake数据工程更高级的方面了。
在第三章中,你将学习如何从云存储提供商那里摄入数据,并在Snowflake中创建外部阶段。我们将解释并比较不同的摄入文件方法,并提供关于如何为高效摄入准备云存储中的数据文件的提示。
在第四章中,你将摄入半结构化的JSON格式数据,并将其扁平化为关系结构。你将向数据管道添加异常处理和日志记录,以确保其对意外错误的弹性。
在第五章中,你将构建一个新的数据管道,该管道能够持续地从文件中摄入数据,一旦它们出现在外部云存储中,延迟最小。我们将介绍Snowflake的特性,如Snowpipe用于持续数据摄入和动态表用于持续数据转换。
第六章涵盖了Snowpark,它包括允许Python和其他编程语言在Snowflake中本机运行的库和代码执行环境。
在第七章中,你将深入研究生成式AI和大型语言模型(LLMs)。你将学习如何从Snowflake调用外部API端点,并使用Snowflake自己的Cortex LLM功能来增强你的数据管道。
在第8章中,我们将使用Snowflake的查询分析工具来理解查询执行的机制,并在处理大量数据时识别优化查询性能的机会。
第9章将探讨影响Snowflake成本的因素以及如何监控信用消耗。我们将解释Snowflake虚拟仓库及其如何影响查询性能。
最后,在第10章中,你将学习关于Snowflake基于角色的访问控制和数据治理功能,例如行访问策略和掩码策略,这些功能限制了授权用户的访问权限。
本章涵盖内容
? 创建外部阶段以从云存储中摄入数据文件
? 使用目录表查看阶段元数据
? 准备数据文件以便高效摄入
? 使用外部表查询外部阶段中的数据
? 使用物化视图提高查询性能
在本章中,我们将基于第2章中创建的第一个数据管道进行扩展。
我们将在数据摄入步骤中增加更多功能,通过访问云存储中的文件而不是本地文件系统。我们将对云存储提供商进行认证并创建外部阶段。
由于数据管道的需求各不相同,因此没有一种适用于所有情况的构建数据管道的方法。我们将演示并比较从云存储中摄入数据的不同选项,包括在外部阶段使用COPY命令、创建外部表,以及创建物化视图以提高查询性能。我们还将回顾如何准备云存储中的数据文件以便高效摄入。
我们的第一步将是创建一个外部阶段,将云存储中的文件暴露给Snowflake。在本章中,我们将继续从CSV文件中摄入数据。除了CSV之外,Snowflake还可以摄入许多结构化和半结构化的文件格式,如JSON、Parquet或XML,我们将在下一章讨论。创建外部阶段的语法和参数可能会根据托管我们将摄入文件的云存储提供商(Amazon S3、Google Cloud Storage或Microsoft Azure Blob Storage)而有所不同。在本章中,我们将使用Microsoft Azure作为平台来展示示例,但你可以跟随不同的云存储提供商。我们将提供链接到Snowflake文档,你将在其中找到与每个支持的云存储提供商一起工作的详细语法。
提示 如果你已经可以访问其中一个支持的云存储提供商,你可以用它来跟随本章中的示例,但请确保你有足够的权限上传文件。否则,你可以创建一个支持的云存储提供商的免费试用账户。
在本章中,我们将继续使用第2章中介绍的虚构面包店作为例子来构建数据管道。简单回顾一下,面包店制作面包和糕点。面包店将这些烘焙食品送到附近的商店,如杂货店、咖啡馆和餐馆。由于面包店没有在线订购系统,客户通过电子邮件订购烘焙食品,面包店将订单存储在本地文件系统上的CSV文件中。
面包店的一位客户,一家附近的餐馆,最近将其信息基础设施迁移到了云端。现在,餐馆可以每天提供存储在其云存储平台专用容器中的CSV文件格式的订单信息。面包店将构建一个数据管道,从云存储容器中摄入餐馆的订单文件,并将其存储在Snowflake数据库中。
注意:本章的所有代码和示例数据文件都可以在GitHub仓库的Chapter_03文件夹中找到,网址为https://mng.bz/AaJQ。
为了构建从云存储中摄入餐馆文件的管道,面包店的数据工程师必须获取关于位置和他们将用来访问文件的凭证的信息。然后,他们将创建一个外部阶段,使数据文件可供Snowflake使用。创建外部阶段通常有两种方法:
- 通过使用Snowflake存储集成对象创建外部阶段。存储集成对象使Snowflake能够对云存储提供者进行身份验证,并用于创建外部阶段。它封装了访问云存储的凭证,因此开发人员无需提供它们。它还允许云存储管理员控制访问权限。
- 在创建外部阶段时,通过提供认证Snowflake到云存储提供者的凭证来创建外部阶段。数据工程师可以使用这种方法快速地从云存储中加载一些数据文件到Snowflake中——例如,用于测试或进行概念验证,而无需创建存储集成对象的开销。
在使用这两种选项之一创建外部阶段之后,文件摄入过程就像从内部阶段摄入文件一样,如第2章所解释的。COPY命令将数据从外部阶段复制到一个临时表中。之后,数据可以从临时表加载到目标表中,就像第2章中的管道一样。图3.1说明了从云存储摄入数据到Snowflake所需的步骤。
3.1 创建外部阶段
外部阶段是存在于架构中的Snowflake对象。此对象存储了云存储中文件的位置、用于访问云存储账户的参数,以及额外的参数,例如描述阶段文件格式的选项。
Snowflake可以从任何支持的云存储提供商(Amazon S3、Google Cloud Storage或Microsoft Azure Blob Storage)中摄入数据,无论托管Snowflake账户的云平台是什么。
在本章的示例中,我们将假设向面包店提供订单信息的餐厅已经在其Microsoft Azure账户中设置了一个blob存储容器。
提示 如果您更喜欢使用您的AWS账户,请参阅第4章,该章描述了在Amazon S3中创建存储集成对象和外部阶段。
在Amazon S3或Google Cloud Storage中创建存储集成
您可以在https://mng.bz/ZVJ9 (Amazon S3) 和 https://mng.bz/RNJa (Google Cloud Storage)找到关于设置Amazon S3和Google Cloud Storage存储集成的详细信息。
如果你正在使用你的Microsoft Azure账户跟随操作,请按照以下步骤在你的账户中创建资源:
1. 创建一个资源组,或者如果你已经有一个并希望用于练习,可以使用现有的资源组。你可以随意命名资源组。
2. 在资源组中创建一个存储账户。
重要:在选择存储账户的名称时,请记住,存储账户的名称必须在3到24个字符之间,并且只能包含数字和小写字母。此外,你的存储账户名称在Azure中必须是唯一的。本章的练习使用bakeryorders001作为存储账户的名称。如果你想给你的存储账户起一个类似的名字,但该名称已被占用,请将后缀从001改为其他数字组合,并相应地修改任何代码。
3. 创建一个容器。容器就像文件系统中的一个目录,它组织了一组文件。你可以随意命名容器,但如果你想按照本章练习中的名称命名,就将其命名为orderfiles。
创建资源后,你可以导航到orderfiles容器,并从GitHub仓库的Chapter_03文件夹中上传一个示例文件,Orders_2023-08-04.csv,到容器中。我们将使用存储集成创建一个外部阶段,以从存储容器中的CSV文件中摄取数据。
3.1.1 配置存储集成
存储集成是一个对象,用于向云存储提供商验证Snowflake的身份。它使Snowflake能够从外部阶段读取数据,可选地写入数据。根据云存储提供商的不同,存储集成对象在不同的参数中保存访问信息。
在本章中,我们将以Microsoft Azure为例,Snowflake必须在Azure账户中注册为应用程序。只有拥有Azure管理权限的用户才能授予Snowflake应用程序所需的权限。存储集成还必须指定一个存储容器,该容器限制了您可以创建外部阶段的位置。
我们将使用CREATE STORAGE INTEGRATION命令创建一个与餐厅的云存储位置的存储集成。拥有ACCOUNTADMIN角色的Snowflake用户或具有CREATE INTEGRATION权限的其他角色可以创建存储集成。
在我们执行创建存储集成的命令之前,我们必须收集由拥有存储账户的餐厅提供的以下信息:
- Azure租户ID
- 存储账户的名称
- 存储容器的名称
在我们的例子中,Azure租户ID是1234abcd-xxx-56efgh78(这是一个用于说明目的的虚构租户ID),存储账户是bakeryorders001,容器是orderfiles。
提示:Azure租户ID是分配给每个使用Microsoft服务的组织的唯一标识符。您可以通过点击设置,然后点击目录+订阅来找到您的租户ID。您将看到一个目录列表。找到默认目录,并查找目录ID的值。这就是您的租户ID。
使用这些信息(租户ID、存储账户和容器),我们可以使用以下命令创建BISTRO_INTEGRATION存储集成:
执行该命令后,在Snowflake账户中创建了一个存储集成对象。我们可以通过执行DESCRIBE STORAGE INTEGRATION命令来查看存储集成的详细信息,如下所示:
表3.1显示了此命令的示例输出(您的输出将包含您的Azure租户ID、同意URL和应用程序名称)。
此命令返回存储集成的属性。我们必须注意以下属性的值:
- AZURE_CONSENT_URL—此参数的值可能看起来像这样:https://login.microsoftonline.com/1234abcd-xxx-56efgh78z/oauth2/authorize?client_id=1234abcd-xxx-56efgh78z&response_type=code(这是一个虚构的URL,仅用于说明目的)。
- AZURE_MULTI_TENANT_APP_NAME—此参数的值可能看起来像这样:12abcsnowflakepacint_1234567890(这是一个虚构的应用名称,仅用于说明目的)。
首先,我们复制AZURE_CONSENT_URL属性的值,并将其作为URL粘贴到新的网页浏览器窗口中。Azure管理员必须点击出现表单中的“接受”按钮。点击此按钮将向Snowflake应用程序(在Azure中也称为服务主体)授予访问令牌。然而,还需要更多操作以允许Snowflake访问存储容器中的文件。Azure管理员还必须授予Snowflake服务主体对存储容器的权限。
为此,Azure管理员必须登录到Azure门户,并向Snowflake服务主体授予角色分配。详细说明可在Snowflake文档中找到,网址为https://mng.bz/2gNw。
Azure管理员可以使用Storage Blob Data Reader角色授予读取权限,或使用Storage Blob Data Contributor角色授予读写权限给Snowflake服务主体。
提示:如果你正在跟随操作,请注意,Snowflake服务主体可能需要一个小时或更长时间才能在Azure中出现。如果你在接受同意URL后它没有立即出现,请耐心等待。
在我们的例子中,Azure管理员执行Azure管理步骤,而不是数据工程师。如果你正在使用你的Azure账户跟随操作,你也会成为Azure管理员。一旦创建了存储集成并授予了访问权限,
我们可以使用它来创建一个外部阶段。
相关推荐
- wordpress集团公司网站模板:XSgr
-
小兽wordpress推出一款高端集团公司主题,打造高品质官网。高端是一种态度和坚持,因为我坚信贴合产品及品牌理念的高端深度定制才能最大化地呈现企业的务实严谨与产品的专业品质相比,某种程度上讲–...
- 宝塔搭建WordPress跨境电商外贸商城模板汉化woodmart7.5.1源码
-
大家好啊,欢迎来到web测评。本期给大家带来一套php开发的WoodmartV7.5.1汉化主题|跨境电商|外贸商城|产品展示网站模板WordPress主题,是wordpress开发的。上次是谁要的系...
- Wordpress建站设计技巧:用好Wordpress自带样板功能
-
作者:悦然wordpress建站(悦然建站)...
- 微软推出Azure平台WordPress模板:分分钟搭建博客
-
IT之家讯微软Azure云服务平台可以托管各种各样的Web服务,从企业应用后端服务到视频托管服务等等。WordPress是目前最为流行的博客平台,驱动着全球1/4的互联网网站。不过用户想要在Azur...
- wordpress公司展示型通用模板:XShw
-
主题介绍xshw公司模板是一款现代化风格、通用型公司展示的Wordpress公司建站模板,采用经典的颜色搭配、精致的模块布局、完善的列表模板、响应式自适应技术以及配置的大幅全屏轮播图、公司简介、业务介...
- WP模板开发中,怎样给wordpress网站的文章,添加点赞功能?
-
我们在网上浏览某些网站的文章时,在文章的结尾处,都会有一个点赞的按钮,如果觉得文章内容非常不错,就可以点击这个“点赞”按钮,给这篇文章进行点赞一下。在wordpress网站的模板主题开发中,我们可不可...
- 免费的WordPress模板
-
免费的WordPress模板有很多种类,适用于不同类型的网站需求。以下是一些推荐的免费WordPress模板,它们各具特色,适合多种用途:...
- 东港边检站开展全面清理自制执勤执法证件表单专项工作
-
为进一步提高边检机关依法行政和服务管理水平,根据部局和总站统一部署,6月3日下午,东港边检站迅速开展全面清理自制执勤执法证件表单专项工作。一是统一思想,提高认识。该站于6月3日召开专题会议,传达部局视...
- 两款超级好用的二维码生成器软件,铁铁们快码住
-
今天分享两款超级好用的二维码生成器,个人认为衡量是否是好用的二维码生成器的主要有以下维度(仅从用户体验角度)...
- 扫码填表如何拍摄现场照片?表单添加图片的二维码制作方法
-
现在通过扫描二维码来登记信息的方式非常的常见,有很多的应用场景会使用这种方式来统计数据,比如问卷调查、用户反馈、巡检结果等类型。通过扫码填写信息后,制作者可以及时的获取对应的数据做出反馈。那么表单二维...
- 纯干货∣教你如何制作一份具有法律效应的“电子合同”
-
表单中使用电子合同时,不仅需要进行功能设置,还需要制作一份PDF格式的模板...
- 金山表单硬核功能“在线考试”上线
-
近日,金山文档针对教师用户群体上线“在线考试”考试功能。教育从业者可在金山文档内完成考试、练习测验、竞赛和作业布置。与此同时,该功能还具备自动批改计分、答案解析、成绩展示、信息收集等特色功能。充分适配...
- 报名小程序怎么制作?借助这个报名表单工具一键搞定
-
报名表单广泛应用于各类活动、课程、会议和招募等场景中,用于收集报名者的个人信息和参与意愿,方便组织者进行统计、管理和沟通。表单制作不需要写代码,学会借助线上报名表单工具就能一键搞定。...
- 货代人的表单制作方式,该升级了!
-
很多在货代行业工作的人可能会思考是否将销售岗位转为操作岗位,因为货代销售工作需要不断迎接业绩的挑战,每个月都要全力以赴,但绩效考核的结果并不总是确定的。...
- 为你的WordPress widget建立表单
-
通过之前的三部分教程我们已经创建了一个自己的WordPresswidget。今天我们将给大家介绍如何为你的widget创建表单,以至于WordPress可以及时的更新widget设置。为widget...