Snowflake & Delta Lake 代表了当前业内最先进的两种数仓形态,并且都得到了市场上用户的高度认可。
1
概述
数据分析从上世纪 80 年代兴起以来,大体经历了企业数仓(EDW)、数据湖(Data Lake)、以及现在的云原生数仓、湖仓一体等过程。企业数仓是数据仓库最原始的版本,从当前的视角来看,存在着只能处理结构化数据、集中式的存储和计算、以及成本昂贵等缺点。数据湖是伴随着数据爆炸式增长而出现的技术,它能够存储结构化以及非结构化的数据、拥有分布式的存储、以及经济的成本。但由于其“不管后面用不用,先存储起来”的理念,在数据治理、质量审核方面有很多的缺失,因此在后续实际的使用当中会面临较多的问题。以 Snowflake 和 Delta Lake 为代表的新兴数仓就是有针对性的去解决上述问题,并充分利用当前卓越技术(如云计算、Hadoop、Spark 等)的新一代企业数据解决方案。
总体来看,Snowflake 像是企业数仓(EDW)的 2.0 版本。Delta Lake 则是 Data Lake 的 2.0 版本。
两个阵营都在争相成为一站式服务,来处理用户的任何数据,以及应对任何场景。
Snowflake 2019 提出 Data Ocean - 支持结构化、半结构化数据,并提供弹性扩展,存储便宜、计算按需付费,事务支持,托管服务功能。19 Q3提供数据复制功能,使 Snowflake 客户能够复制数据库,并使数据库在不同区域和/或云提供商的多个帐户之间保持同步。这样可以确保在区域性或云提供商中断的情况下业务连续性。它还允许客户想要迁移到其他区域或云时所需的可移植性。另一个好处是能够轻松安全地在区域和云之间共享数据。扩展全球数据湖的覆盖范围,从而将数据湖变成数据海洋。
Databricks 2020 基于 Delta Lake 提出 Data Lakehouse 概念。数据湖 1.0 版本虽然适用于存储数据,但缺少一些关键功能:它们不支持事务,它们不强制执行数据质量,并且缺乏一致性/隔离性,几乎不可能混合添加和读取以及批处理和流式作业。由于这些原因,数据湖的许多承诺尚未实现,并且在许多情况下导致失去数据仓库的许多好处。Data Lakehouse 提供事务支持,强制的模式要求及健壮的治理和审核机制,除了提供对 BI 分析的支持,Data Lakehouse 还支持存算分离,数据格式开放性,非结构化到结构化数据类型全支持,以及支持机器学习、科学计算及 AI 等工作负载,并提供端到端流等功能。
下面对 Snowflake 和 Delta Lake 分别做一个详细介绍。
2
Snowflake 介绍
Snowflake 是完全建立在云上的企业级数据仓库解决方案。Snowflake 是云原生的因为它针对并基于云环境进行了根本性的重新设计,处理引擎和其他大部分组件都是从新开始开发的。Snowflake 在亚马逊及其他云上提供即付即用的服务。用户只需将数据导入云,就可以立即利用他们熟悉的工具和界面进行管理和查询。从 2012 年底,Snowflake 开始计划实施,到 2015 年 6 月,Snowflake 已经可以大体可用。目前,Snowflake 已经被越来越多的组织采用,每天管理者几百上千万次的查询以及 PB 级以上的数据。
Snowflake 的关键特点如下:
* 纯粹的 SaaS 服务体验:用户不需要购买机器、聘请数据库管理员或安装软件。用户要么已经在云中拥有数据,要么上传数据。然后,就可以使用 Snowflake 的图形界面或 ODBC 等标准化接口立即操作和查询数据。与其他数据库即服务(DBaaS)产品不同,Snowflake 的服务覆盖了整个用户体验。用户无需调优,无需物理设计,无需存储整理任务。
* 关系型语法兼容:Snowflake 对 ANSI SQL 和 ACID 事务提供了全面的支持。大多数用户几乎不需要更改就可以迁移现有工作负载。
* 半结构化数据支持:自动模式发现(schema)及列式存储等功能使得 Snowflake 可以像普通关系数据一样处理无 schema、半结构化的数据,并没有额外开销。
* 弹性
* 高可用
* 数据持久性
* 经济:以上都是云原生所带来的好处。
* 安全:Snowflake 中所有的数据包括临时文件及网络传输都是端到端加密的,没有任何信息会暴露。并且基于角色的权限控制使用户能够在 SQL 级别上执行细粒度的访问控制。
3
Snowflake 核心技术
存储和计算分离
Shared-nothing 架构目前已经成为高性能数据仓库的主流体系结构,主要原因有两个:可扩展性和商用廉价硬件。在 Shared-nothing 结构中,每个查询处理器节点都有自己的本地磁盘。表是跨节点水平分区的,每个节点只负责其本地磁盘上的行。这种设计可以很好地扩展星型模式查询,因为将一个小的(广播的)维度表与一个大的(分区的)事实表连接起来只需要很少的带宽。而且,由于共享数据结构或硬件资源几乎没有争用,因此不需要昂贵的定制硬件。这种方法是很容易理解的并具有良好优点的软件设计。
不过,纯粹的 Shared-nothing 结构有一个重要的缺点:它将计算资源和存储资源紧密耦合,这在某些场景中会导致问题。
异构工作负载:虽然硬件是同样的,但工作负载通常不是。有些任务需要高 IO,轻计算,有些需要重计算,轻 IO。因此,硬件配置需要在平均利用率较低的情况下进行权衡。
节点关系变化:如果一些节点发生更改,或者是由于节点故障,或者是用户调整系统大小,则大量数据需要重新 shuffle。由于相同的节点同时负责数据 shuffle 和查询,因此会对性能有显著的影响,从而限制了灵活性和可用性。
在线升级:虽然可以通过数据复制、系统节点交替升级等技术减少影响,但总体上还是比较困难。