20年前,你的数据仓库可能不会被评为最热门的技术。这些办公室地下室的堡垒长期以来一直与孤立的数据工作流程、企业内部的计算集群和一组有限的业务相关任务(即处理工资和存储内部文件)相关。
现在,随着数据驱动的分析、跨职能的数据团队以及最重要的云计算的兴起,"云数据仓库 "这个短语几乎与敏捷性和创新相类似。
在许多方面,云使数据更容易管理,更容易被更多的用户访问,而且处理速度也快得多。如果不利用云数据仓库解决方案(或两个或三个......或更多),公司实际上就无法以有意义的方式使用数据。
然而,当谈到为你的数据平台选择正确的云数据仓库时,答案并不那么简单。随着2013年亚马逊Redshift的发布,以及随后几年Snowflake、Google Big Query等的发布,市场已经变得越来越热。
再加上数据湖,这个决定就变得更加困难了。
无论你是刚刚开始还是正在重新评估你现有的解决方案,这里有你需要知道的一切,为你的数据堆栈选择合适的数据仓库(或湖)。
什么造就了数据仓库或湖泊?
数据仓库和湖泊是你的数据基础设施的基础,提供存储、计算能力和关于你的生态系统中的数据的上下文信息。就像汽车的引擎一样,这些技术是数据平台的主力。
元数据
仓库和湖通常提供一种方法来管理和跟踪你所创建的所有数据库、模式和表。这些对象通常伴随着额外的信息,如模式、数据类型、用户生成的描述,甚至是新鲜度和其他关于数据的统计数据。
存储
存储指的是仓库/湖泊物理存储所有表内存在的所有记录的方式。通过利用各种存储技术和数据格式,仓库/湖泊可以为广泛的使用案例提供所需的成本/性能特征。
计算
计算是指仓库/湖泊对其存储的数据记录进行计算的方式。这是一个允许用户 "查询 "数据的引擎,摄入数据,转换数据--更广泛地说,从中提取价值。通常,这些计算是通过SQL表达的。
为什么选择数据仓库?
数据仓库是完全集成和管理的解决方案,使它们能够简单地建立和操作。当使用数据湖时,你通常使用来自单一解决方案的元数据、存储和计算,由单一供应商构建和运营。
与数据湖不同,数据仓库通常需要更多的结构和模式,这通常会迫使人们更好地进行数据卫生,并在阅读和消费数据时减少复杂性。
由于其预先包装的功能和对SQL的强大支持,数据仓库有利于快速、可操作的查询,使其成为数据分析团队的最佳选择。
常见的数据仓库技术包括。
- 亚马逊Redshift。亚马逊Redshift是第一个广泛流行的(而且是现成的)云数据仓库,它位于亚马逊网络服务(AWS)之上,利用源连接器将数据从原始数据源输送到关系型存储。Redshift的列式存储结构和并行处理使其成为分析工作负载的理想选择。
- 谷歌BigQuery。与Redshift一样,Google BigQuery利用其母体的专有云平台(Google Cloud),使用列式存储格式,并利用并行处理的优势进行快速查询。与Redshift不同,BigQuery是一个无服务器的解决方案,可根据使用模式进行扩展。
- Snowflake。与Redshift或GCP依靠其专有的云来运作不同,Snowflake的云数据仓库功能是由AWS,谷歌,Azure和其他公共云基础设施提供的。与Redshift不同,Snowflake允许用户为计算和存储支付单独的费用,使数据仓库成为寻找更灵活的薪酬结构的团队的一个伟大选择。
为什么选择数据湖?
数据湖是数据仓库的DIY版本,允许数据工程团队根据其系统的需要,挑选他们想要使用的各种元数据,存储和计算技术。
数据湖是希望建立一个更多定制平台的数据团队的理想选择,通常由少数(或更多)数据工程师支持。
数据湖通常是用开源和闭源技术的组合构建的,使它们易于定制,并能处理日益复杂的工作流程。图片来源:Lior Gavish。
数据湖的一些共同特征包括。
- 解耦存储和计算。这种功能不仅可以节省大量的成本,而且还有利于解析和丰富数据,以实现实时流和查询。
- 对分布式计算的支持。分布式计算有助于支持大规模数据处理的性能,因为它可以实现更好的分段查询性能,更多的容错设计,以及卓越的并行数据处理。
- 定制和互操作性。由于其 "即插即用 "的性质,数据湖支持数据平台的可扩展性,随着公司数据需求的发展和成熟,你的堆栈的不同元素可以很容易地一起发挥。
- 主要是建立在开源技术上。这有利于减少对供应商的锁定,并提供巨大的定制,这对拥有大型数据工程团队的公司来说非常有效。
- 有能力处理非结构化或弱结构化的数据。数据湖可以支持原始数据,这意味着你在处理数据时有更大的灵活性,是数据科学家和数据工程师的理想选择。使用原始数据让你对你的聚合和计算有更多的控制。
- 支持复杂的非SQL编程模型。与大多数数据仓库不同,数据湖支持Apache Hadoop、Apache Spark、PySpark和其他高级数据科学和机器学习的框架。
值得注意的是,许多数据仓库解决方案,包括Snowflake和BigQuery,可以支持上述的一些功能,这导致我们的下一个观点...
介绍数据仓库
就在你认为这个决定已经足够艰难的时候,另一个数据仓库的选择已经出现了,特别是在数据工程团队中,越来越受欢迎。
数据湖库是一种解决方案,它结合了数据仓库和数据湖的特点,因此,将传统的数据分析技术与那些为更先进的计算(即机器学习)而构建的技术相结合。
数据湖库为数据团队提供了更大的可定制性,允许他们在云上存储数据,并利用仓库的计算引擎。图片来源:Lior Gavish
当云仓库供应商开始增加提供湖泊式好处的功能,如Redshift Spectrum或Delta Lake时,数据湖室首次出现在舞台上。
同样地,数据湖也一直在增加提供仓库式功能的技术,如SQL功能和模式。今天,仓库和湖泊之间的历史差异正在缩小,因此你可以在一个包中获得两个世界的最佳功能。
以下功能正在帮助数据湖泊进一步模糊这两种技术之间的界限。
- 高性能SQL:像Presto和Spark这样的技术在数据湖上以接近于交互式的速度提供SQL接口。这为数据湖直接服务于分析和探索性需求提供了可能,而不需要汇总和ETL到传统的数据仓库中。
- 模式:像Parquet这样的文件格式为数据湖表引入了更严格的模式,以及列式格式以提高查询效率。
- 原子性、一致性、隔离性和持久性(ACID):像Delta Lake和Apache Hudi这样的湖泊技术在写/读交易中引入了更大的可靠性,并使湖泊更接近传统数据库技术中标准的非常理想的ACID属性。
- 管理服务:对于那些希望减少与构建和运行数据湖相关的操作提升的团队,云供应商提供了各种管理湖服务。例如,Databricks提供Apache Hive、Delta Lake和Apache Spark的管理版本,而Amazon Athena提供完全管理的湖泊SQL查询引擎,Amazon的Glue提供完全管理的元数据服务。
随着实时数据聚合和流媒体的兴起,为光速分析提供信息(想想硅谷科技巨头的速度:Uber、DoorDash和Airbnb),在未来几年里,数据 湖库 可能会在各行业的数据团队中流行起来,并与之相关。
那么,你应该选择什么?
没有一个简单的答案。事实上,数据团队经常从一个数据仓库解决方案迁移到另一个,这并不奇怪,因为他们的数据组织的需求在不断变化,以满足数据消费者的需求(如今,几乎是企业的每一个职能领域,从市场营销和销售到运营和人力资源)。
虽然数据仓库对于主要用于数据分析和报告的数据平台来说通常是有意义的,但数据湖正变得越来越用户友好,特别是通过像Dremio这样的管理数据湖库解决方案和Delta Lake这样的开源项目。
越来越多的人发现,数据团队不愿意只满足于数据仓库、数据湖,甚至是数据湖室--这是有原因的。随着更多用例的出现和更多利益相关者(具有不同的技能组合!)的参与,单一的解决方案几乎不可能满足所有需求。
我们与一家拥有5000人的共享汽车公司的数据负责人交谈过,他告诉我们,尽管他的数据工程团队坚定地认为他们想建立一个数据湖,但他们最终还是为报告、访问控制和数据质量设置了一个内部系统,使最终产品变成了一个数据仓库。
我们发现,无论你选择何种途径,应用以下最佳实践是非常重要的。
与公司的数据目标相一致的解决方案。
如果你的公司只在选定的几个工作流程中定期使用一个或两个关键的数据源,那么从时间和资源上来说,从头开始建立一个数据湖可能没有意义。
但是,如果你的公司试图使用数据来通知阳光下的一切,那么混合仓库-湖泊解决方案可能只是你的票,为不同角色的用户提供快速,可操作的洞察力。
知道你的核心用户是谁。
你的数据平台的主要用户是你公司的商业智能团队,分布在几个不同的职能部门?一个专门的数据工程师团队呢?或者几组数据科学家用各种数据集进行A/B测试?上述所有的人?
无论如何,选择对你的用户的技能组合和需求最有意义的数据仓库/湖泊/湖心岛选项。
不要忘记数据质量。
数据仓库、数据湖、数据湖馆:这并不重要。所有这三种解决方案(以及它们的任何组合)都需要一个整体的数据治理和数据质量的方法。
如果你不能信任你的数据,你对最新和最伟大的数据仓库的周到投资并不重要。
下一步是什么?
当涉及到数据平台的这一基本要素时,我很高兴看到数据行业的发展方向。我预测,一个成熟的数据堆栈可能会包括一个以上的解决方案,而数据组织将最终受益于更大的成本节约、敏捷性和创新。
数据湖数据科学 数据仓库