百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Snowflake数据工程实战 三、数据预处理的最佳实践(1)

haoteby 2024-12-30 04:13 10 浏览

现在你已经完成了你的第一个数据工程管道,你已经准备好探索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管理员。一旦创建了存储集成并授予了访问权限,

我们可以使用它来创建一个外部阶段。

相关推荐

一日一技:用Python程序将十进制转换为二进制

用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...

十进制转化成二进制你会吗?#数学思维

六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...

二进制、十进制、八进制和十六进制,它们之间是如何转换的?

在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...

c语言-2进制转10进制_c语言 二进制转十进制

#include<stdio.h>intmain(){charch;inta=0;...

二进制、八进制、十进制和十六进制数制转换

一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...

二进制、十进制、八进制、十六进制间的相互转换函数

二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...

二进制、八进制、十进制和十六进制等常用数制及其相互转换

从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...

二进制如何转换成十进制?_二进制如何转换成十进制例子图解

随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...

二进制与十进制的相互转换_二进制和十进制之间转换

很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...

十进制如何转换为二进制,二进制如何转换为十进制

用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...

十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明

我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...

二进制转化为十进制,你会做吗?一起来试试吧

今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...

Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译

Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...

怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定

想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...

6个mp4格式转换器测评:转换速度与质量并存!

MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...