Snowflake 快速入门——快速上手云分析

"别把目标定在中庸。要敢于胸怀大志。去颠覆,去革新。别害怕树立一个宏大的梦想,它不仅要激励他人,也要激励你自己。渐进式创新不会带来真正的改变------它只会让事物略有改进。要追求突破性的创新,去实现真正有影响的改变。"

------莱昂纳德·布罗迪(Leonard Brody)与大卫·拉法(David Raffa)

云技术可以改变组织开展分析工作的方式。云让组织能够快速行动并采用业界最佳技术。传统上,数据仓库和商业智能(BI)项目被视为重大的投资,往往需要数年才能建成。它们需要一支由 BI、数据仓库和数据集成的开发人员与架构师组成的可靠团队。此外,还需要大量投入、IT 支持,以及硬件与资源采购。即便团队、预算和硬件都到位,仍然有可能失败。

云计算这一概念并不新,但直到近几年才在分析类用例中被广泛采用。云为你提供几乎无限、低成本的存储,可伸缩的计算能力,以及构建安全解决方案的工具。最后,你只需为所用即付费。

本章将梳理过去十年分析市场的趋势与数据仓库的演进,讲解关键云概念,并介绍 Snowflake 数据仓库及其独特架构。

是时候创新了

作为数据从业者,我们参与过许多数据仓库项目。在各行各业设计并实施过大量企业级数据仓库解决方案。有的项目从零搭建,有的则负责修复改造。此外,我们还将系统从"遗留"(legacy)平台迁移到现代的大规模并行处理(MPP)平台,并采用 ELT(抽取-加载-转换)方式,让 MPP 数据仓库平台承担主要的计算工作。

MPP 是分析型数据仓库的核心原则之一,至今依然适用。在 MPP 出现之前的替代方案------对称多处理(SMP)------也值得了解。图 1-1 提供了一个简单示例,帮助你理解对称多处理(SMP)与 MPP 的差别。

让我们看一个简单的例子。想象你要洗衣服,有两种选择:

  • 牺牲周五晚上的派对,去自助洗衣店,因为大家都在派对上,你可以把所有脏衣服并行地同时洗 (这就是 MPP)。
  • 周六再去洗衣店,但只用一台洗衣机 (这就是 SMP)。

同时运行六台洗衣机,显然比一台一台地洗要更快洗完更多衣物。正是这种线性可扩展性,让 MPP 系统能更快完成任务。表 1-1 对 SMPMPP 做了比较。若你从事数据仓库相关工作,可能已熟悉这些概念。Snowflake 在这一领域做了创新,实际上结合SMPMPP

表 1-1 MPP vs. SMP

模型 描述
大规模并行处理(MPP 多个处理器协同处理单一任务,每个处理器使用各自的操作系统(OS)与内存,并通过某种消息接口互相通信。通常,MPP 采用**无共享(share-nothing)**架构。
对称多处理(SMP 紧耦合的多处理器系统,处理器共享 资源,如单实例的操作系统、内存、I/O 设备以及公共总线。SMP 是一种共享磁盘架构。

回到我们的过往经历:在企业级组织里,Oracle 一度非常流行。所有数据仓库解决方案都有一个共同点:极其昂贵,并且需要采购硬件。对咨询公司而言,硬件生意能带来营收:即便某个咨询项目不赚钱,硬件合同也能"覆盖"年度奖金。

后来,Hadoop 与大数据 崛起。互联网上充斥着"用 Hadoop 生态取代传统数据仓库"的新闻。那段时间对 Java 开发者来说很美好,大家可以愉快地写代码、写 MapReduce 作业,直到社区推出了一堆 SQL 工具(如 Hive、Presto 等)。与其亲自去学 Java,我们更倾向于应用帕累托原则 :用传统数据仓库平台与 SQL 解决 20% 的任务,便能带来 80% 的价值。(实际上,我们认为更像是 80% 的场景贡献了 95% 的价值。)

接着是数据科学与机器学习 的兴起,开发者开始学习 RPython 。然而我们发现,没有 ELT/ETL 与数据仓库的支撑 ,本地的 R/Python 脚本并没有太大价值。拿到样例数据集并用数据挖掘技术建个模型并不难,但自动化与规模化 很难,因为算力不足

随后出现了数据湖(data lake) 。很明显,数据仓库装不下所有数据,而且把所有数据都放进仓库也太昂贵 。如果你不熟悉数据湖,可参见:medium.com/rock-your-d...

又一次,有人主张数据湖就是新的数据仓库,所有人都该立刻用 Hadoop 技术栈把传统方案迁到数据湖。基于我们服务 BI 与业务用户的经验,我们并不认为数据湖可以取代传统 SQL 数据仓库 。不过,当存在大量非结构化数据 、且我们不想用现有数据仓库(因为算力与存储能力不足)时,数据湖能够补充 现有数据仓库。像 Hive、Presto、Impala 这样的 Apache 项目,让我们可以用 SQL 访问大数据存储,并让传统 BI 能够利用数据湖中的数据。显然,这条路成本高 ,但对资源充足且 IT 团队强的大公司是可行的。

数据湖相较传统数据仓库的一个重大优势是:计算与存储解耦 。想象你有一个专用的 MPP 集群数据仓库,结果存储或算力不够了 。你得再加节点------而节点同时带来存储与计算资源,即便你只缺其中一个,也得为两者付费。在数据湖架构中,计算与存储可以独立扩展 。这带来诸多好处,包括扩展分析能力、提升性价比 。但这种方式也有缺点,比如缺乏传统数据库与数据仓库平台所具备的 ACID 能力 。表 1-2 概述了 ACID 特性并给出示例。

表 1-2 ACID 特性

模型 描述
原子性(Atomicity) 确保每个事务被当作一个完整的工作单元,要么全部完成 ,要么完全不执行 。若事务的一部分失败,整个事务将回滚,使数据库回到先前状态。例如:在数据仓库中进行数据装载、要更新多张表时,原子性保证要么全部 应用更新,要么全部不应用,从而维护数据完整性。
一致性(Consistency) 确保任意事务都会把数据库从一个有效状态 带到另一个有效状态,遵守预定义的规则与约束。例如:有外键或数据类型等约束时,一致性保证事务完成后数据仍符合这些规则。
隔离性(Isolation) 保证每个事务的执行互不干扰例如:在分析查询场景,即便有多个用户同时运行查询或更新数据,隔离性确保他们不会相互影响
持久性(Durability) 确保一旦事务提交,其结果将持久保存 ,即便发生断电或系统崩溃也不会丢失。例如:把数据装载进仓库后,持久性保证系统重启后数据依然在且可用。

2013 年,我们听说了云上的数据仓库------Amazon Redshift 。我们并未看到它与本地的 Teradata 有本质差异,但显而易见的是:不用再买昂贵的专用设备 ,也能达到同样效果。那时我们就注意到 Redshift 的一个好处:它构建在开源数据库 Postgres 之上。这意味着我们几乎不用重新学习 :Teradata 给我们的 MPP 概念我们已经懂了,Postgres 我们也熟悉,于是可以立刻上手 Redshift 。在 Oracle、Teradata 这些"巨龙"主导的世界里,这简直像一股清风。

显而易见,Amazon Redshift 并非颠覆式创新 ,而是增量式 改进:在既有基础上做提升。换句话说,它是对既有技术/系统的改良。这正是 Snowflake 与其他云数据仓库平台之间核心差异的起点。

Amazon Redshift 很快流行起来,其他公司也陆续推出各自的云数据仓库平台。如今,所有大型厂商都在构建面向云的数据仓库解决方案。

Snowflake 则是一项颠覆式创新 。Snowflake 的创始人把既有数据仓库平台的各种痛点汇总,提出了全新的架构与产品 ,既能满足现代数据需求,又允许组织在有限预算与小团队快速推进。

每个人都有自己的道路:有人深耕 Hadoop 等大数据技术;也有人长期从事传统数据仓库与 BI 方案。但我们有一个共同目标------让组织真正以数据驱动 。随着云计算的兴起,我们拥有了更快更好 完成工作的机会,且云计算也打开了分析的新方式。Snowflake 创立于 2012 年2014 年 10 月 以隐身模式对外,2015 年 6 月 正式商用(GA)。Snowflake 为数据仓库世界带来了创新,开启了数据仓库的新纪元

如今有三个术语:数据仓库(data warehouse)数据湖(data lake)湖仓一体(lakehouse)Databricks2020 年 提出"lakehouse"一词,其想法是把数据湖与数据仓库的优点融合于同一平台 。这意味着 lakehouse 既能解耦存储与计算 并独立扩展,又在某种程度上支持 ACID 。当前较流行的开源方案有 Apache Iceberg、Apache Delta、Apache Hudi 。本书聚焦 Apache Iceberg ,因为 Snowflake 支持这种开放表格式 ,且其流行度很高

在本章后续部分,我们将讨论 Snowflake 的架构,届时你可以自行判断:Snowflake 究竟更像是一个数据仓库 ,还是一个湖仓一体平台。

云计算关键概念

在深入 Snowflake 之前,我们先梳理一些云的基础知识,帮助你更好地理解云平台的价值。

从本质上说,云计算是一个远程的、虚拟化的按需共享资源池,提供计算、存储、数据库和网络等服务,并且能够快速、规模化地部署。图 1-2 展示了云计算的关键要素。

表 1-3 定义了云计算中的关键术语。 这些术语既是云分析解决方案的构建基石,也是 Snowflake 数据仓库的基础。

表 1-3 云计算关键术语

术语 说明
Compute(计算/算力) 处理工作负载的"大脑 "。包含 CPU 与内存(RAM),用于运行各类工作负载与进程------在我们的场景中即对数据进行处理。
Databases(数据库) 传统 SQL 或 NoSQL 数据库,可被应用与分析方案利用来存储结构化数据
Storage(存储) 原始格式 将数据保存为文件;可以是文本、图像、音频等。云中任何能够存放数据的资源都属于存储资源。
Network(网络) 为各类云服务与其使用者之间提供连接所需的资源。
ML/AI(机器学习/人工智能) 重型计算分析型工作负载提供的专用资源。

另外,需要强调虚拟机监控器/管理程序(Hypervisor)是云计算的核心要素之一。图 1-3 展示了一台主机承载多个 虚拟机(VM)以及一个 Hypervisor:它创建出虚拟化环境,使得多台 VM 能同时部署在一台物理主机上

虚拟化带来的优势:

  • 降低资本性支出(CapEx)
  • 降低运营成本(OpEx)
  • 占用空间更小(smaller footprint)
  • 资源优化(提高资源利用率)

如图 1-4 所示,云有三种部署模型

你选择哪种模型,取决于组织的数据处理政策与安全要求。比如,掌握大量关键客户信息的政府与医疗机构,往往更倾向于把数据保存在私有云 中。表 1-4 给出了云部署模型的定义。

表 1-4 云部署模型

模型 描述
公有云(Public cloud) 服务提供商向各组织开放其云基础设施;该基础设施位于服务提供商的场地(数据中心),但由为其付费的组织来操作。
私有云(Private cloud) 云由某个特定机构、组织或企业独享拥有
混合云(Hybrid cloud) 公有云与私有云的组合

在大多数情况下,我们更倾向于使用公有云Amazon Web Services (AWS)Microsoft AzureGoogle Cloud Platform 都是公有云,你可以立即开始构建解决方案与应用。

此外,了解云服务模型 (相对于本地部署 on-premises 方案)也很重要。图 1-5 用一个简单的类比------ "汉堡即服务(Hamburger as a Service)" ------来展示三种主要服务模型。

IaaS 的一个例子是云虚拟机Amazon EC2 就是 IaaS 的代表。
Amazon Elastic MapReduce (即托管 Hadoop)和 Amazon RedshiftPaaS 的示例;而 DynamoDB (AWS 的 NoSQL 数据库)与 Lambda 则是 SaaS 的示例------由服务方为你全权托管

:在云端软件交付模型中,SaaS最全面 的服务形态,它把大量底层硬件与软件的维护工作从终端用户处抽象 掉,特点是无缝的网页体验 ,用户侧所需的管理与优化最少。相比之下,IaaSPaaS 往往需要用户对底层硬件或软件进行更多管理

Snowflake 采用 SaaS 模式,也被称为数据仓库即服务(DWaaS) 。从数据库存储基础设施 、用于分析的计算资源 ,到库内数据的优化 ,都由 Snowflake 负责。

这对数据工程师意味着什么?我们用 Amazon Redshift 作个对比示例:假设你在构建数据仓库,需要创建一张数十亿行事实表 ,你必须为这张事实表选择数据分布方式 。Redshift 是 MPP 架构,包含多个节点,我们的目标是把数据尽可能均匀地分布 。数据仓库的性能会受这些决策影响;一旦设计不当,后续修改既痛苦耗时 ------这曾是数据工程师的日常工作。而在 Snowflake 中,这一流程由平台代为管理 :我们可以向事实表摄取 TB 级数据 ,Snowflake 会负责数据的分布与存储优化,确保以最高效的方式落盘。书中稍后会深入介绍。

值得一提的是,尽管 Snowflake 以其独特的 DWaaS 产品形态有了一个良好开局,近邻竞品 也在大力投入创新以匹配其能力。我们已提到 Amazon Redshift 作为首个真正的云端 MPP 数据仓库:为解决计算与存储独立扩展 的限制,Redshift 在 2019 年末 发布了新的 RA3 实例类型;2022 年 ,AWS 又推出 Amazon Redshift Serverless,让你无需预先配置集群即可管理工作负载。

云计算理论的最后一个方面是共享责任模型(Shared Responsibility Model,SRM) 。图 1-6 展示了 SRM 的关键要素。

共享责任模型(SRM) 包含许多要素,但核心思想是:云厂商负责"云之安全",客户负责"云中的安全" 。也就是说,客户应制定自身的安全策略,并采纳数据安全的最佳实践来保护其数据。

谈到云时,需要了解云资源托管在各个数据中心,并存在区域(region) 这一概念。你可以在以下页面查阅不同云厂商与区域的 Snowflake 可用性信息:docs.snowflake.net/manuals/use...

这张表在把数据仓库从本地(on-premises)迁移到云上时是一个有用的参考。关于数据仓库的迁移与现代化,你可以在第 14 章了解更多。

走近 Snowflake(Meet Snowflake)

Snowflake 是首个自底向上为云而生的数据仓库,是同类最佳的 DWaaS(数据仓库即服务) 。它运行在主流云服务商之上,如 Amazon Web ServicesMicrosoft Azure ,并已宣布在 Google Cloud Platform 上提供可用性。因此,我们可以在任一主流云厂商的平台上部署这一数据仓库。与传统数据仓库相比,Snowflake 更快、更易用、也更灵活;它负责认证、配置、资源管理、数据保护、可用性与优化等各个方面。

上手 Snowflake 很容易:选择合适的版本并注册即可。你可以从免费试用 开始,了解 Snowflake 的关键特性,或在 trial.snowflake.com 与其他数据仓库平台进行对比。你可以立即加载数据并获取洞见。Snowflake 的所有服务组件都运行在公有云基础设施上。

:Snowflake 无法运行在私有云基础设施(本地或托管环境)中;它并非用户可自行安装的"打包软件"。Snowflake 负责所有软件安装与更新的工作。

Snowflake 自底层重新构建,旨在应对现代大数据与分析挑战。它结合了 SMP 与 MPP 架构的优势,并充分利用云 。图 1-8 展示了 Snowflake 的架构。 在进入下一节之前,请参见图 1-7 ,其中展示了数据上传到云所需的时间 ;该参考来自 Google Cloud Platform 的演示文稿。

SMP 架构相似,Snowflake 采用一个中心化存储 ,所有计算节点都可访问。与此同时,类似 MPP 架构,Snowflake 使用 MPP 计算集群 来处理查询,这些集群也称为虚拟仓库(virtual warehouses) 。因此,Snowflake 将数据管理的简洁性与可伸缩性 ,与 MPP 式的**无共享(share-nothing)**架构相结合。

如图 1-8 所示,Snowflake 的架构由三个主要层次构成。表 1-5 对每一层做了说明。

表 1-5 Snowflake 的关键层次

层次 说明
服务层(Service layer) 由一组用于协调 Snowflake 工作的服务组成,运行在专用实例上,包括认证基础设施管理元数据管理查询解析与优化访问控制等。
计算层(Compute layer) 由**虚拟仓库(Virtual Warehouses,VW)**构成。每个 VW 都是一个 MPP 计算集群,由多台计算节点组成;各个 VW 彼此独立不共享资源
存储层(Storage layer) 通过云存储以内部压缩列式格式 保存数据。例如在 AWS 上使用 S3 ,在 Azure 上使用 Blob Storage 。Snowflake 负责存储的全部管理,客户不能直接 访问底层文件存储;数据只能通过 SQL 访问。

换句话说,Snowflake 通过利用云端的存储与计算,提供近乎无限 的计算和存储能力。看一个传统组织的例子:你有一个数据仓库,每晚运行 ETL(抽取-转换-加载) 。在 ETL 高峰期,业务用户几乎无法顺畅使用数据仓库,可用资源也很紧张。与此同时,市场部 需要跑复杂查询做归因模型库存团队 要跑报表并优化库存。也就是说,组织里的每个流程与团队都很重要,但数据仓库成了瓶颈

Snowflake 场景下,每个团队/部门都可以拥有自己的虚拟仓库 ,并可根据需求即时扩容或缩容 。此外,ETL 流程也可以有自己只在夜间运行 的虚拟仓库。这样一来,数据仓库不再是瓶颈,组织能够释放数据潜能 。同时,组织只为实际使用 的资源付费------无需购买昂贵设备,也无需为未来负载操心。Snowflake 真正实现了数据的民主化,将近乎无限的能力交到业务用户手中。

除了可伸缩与简洁,Snowflake 还提供了许多此前不存在、其他云端或本地数据仓库也不具备 的特性,例如:数据共享(data sharing)时光回溯(time travel)数据库复制与故障切换、**零拷贝克隆(zero-copy cloning)**等(本书将进一步讨论)。

小结

本章简要回顾了数据仓库的发展史,并讲解了云计算基础,为理解为何 Snowflake 会进入市场、以及为何 代表数据仓库与现代分析的未来提供了背景。你也了解了 Snowflake 的独特架构 及其关键层次。下一章将介绍如何开始使用 Snowflake。

相关推荐
liliangcsdn7 分钟前
基于llama.cpp的量化版reranker模型调用示例
人工智能·数据分析·embedding·llama·rerank
我要学习别拦我~25 分钟前
Kaggle项目:一次 Uber 出行数据分析的完整思路
大数据·经验分享·数据分析
一枚小小程序员哈1 小时前
大数据、hadoop、爬虫、spark项目开发设计之基于数据挖掘的交通流量分析研究
大数据·hadoop·爬虫
TDengine (老段)1 小时前
TDengine IDMP 运维指南(管理策略)
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
数据智能老司机4 小时前
Snowflake 快速入门——使用 Snowpipe 与动态表实现持续数据加载
大数据·数据分析·saas
数据智能老司机4 小时前
面向网络安全的数据工程——数据工程基础
安全·架构·数据分析
数据智能老司机4 小时前
Snowflake 快速入门——Snowflake 管理与 RBAC
大数据·数据分析·saas
武子康4 小时前
大数据-77 Kafka 延时队列与消息重试机制全解析:从原理到实战落地 Java
大数据·后端·kafka
攻城狮7号6 小时前
以国产IoTDB为代表的主流时序数据库架构与性能深度选型评测
大数据·物联网·时序数据库·apache iotdb·sql mcp