数据湖与数据仓库
大家好,本期 Jesse 想跳脱开 TSDB 领域,来聊一聊数据湖与数据仓库的话题,Jesse 作为局外人也想大体介绍一下二者的情况。
本文仅代表个人观点,如有偏颇之处,还请海涵~
🤠🤠🤠
数据湖与数据仓库
20 年前,数据仓库并不是业内最热门的技术。长期以来数据之间存在壁垒,孤立的数据工作流普遍存在,大部分企业都是本地计算集群,业务之间的任务仅仅被有限的关联。而现如今,随着数据驱动分析、跨职能数据团队以及云的兴起,“现代数据仓库”和数据湖这些术语应运而生。在许多方面,云使数据更易于管理,更广泛的用户可以访问,并且处理速度更快。如果没有数据湖与数据仓库的讨论,公司无法以有意义的方式使用数据。然而,在选择数据湖还是数据仓库时,要给出答案并不容易。随着 2013 年 Amazon Redshift 的发布,以及随后几年的 Snowflake、Google BigQuery 等的发布,市场变得越来越火爆。将 S3 或 Databricks 等数据湖添加到组合中,数据湖与数据仓库之间的决策变得更加困难。
数据仓库与数据湖是什么
数据仓库是提供数据存储和计算的数据存储库,通常利用 SQL 查询进行数据分析用例。数据湖是为结构化和非结构化数据提供存储和计算的数据存储库,通常用于流式传输、机器学习或数据科学用例。
数据湖与数据仓库的异同
数据湖和数据仓库都是数据存储库。数据仓库和数据湖之间的 3 个主要区别是它们如何提供存储、元数据和计算能力。
存储:存储是指数据仓库和数据湖存储所有表中存在的所有记录的方式。通过利用各种存储技术和数据格式,数据仓库和数据湖可以为具有所需成本和性能特征的广泛用例提供服务。传统上,数据湖无限制地存储原始结构化、半结构化和非结构化数据,而数据仓库以有序的方式存储数据及其相应的元数据。随着 Databricks 使用户能够通过 Unity Catalog 和 Delta Lake 添加结构和元数据,这些差异随着时间的推移而收敛,而 Snowflake 引入了 Apache Iceberg 表以带来 SQL 表的可靠性和简单性,同时使 Apache Spark、Trino、Apache Flink、Presto 和 Hive 等引擎可以同时安全地使用相同的表。
元数据:数据仓库和数据湖通常提供一种管理和跟踪我们创建的所有数据库、模式和表的方法。这些对象通常伴随着额外的信息,例如模式、数据类型、用户生成的描述,甚至是新鲜度和其他关于数据的统计信息。
计算:计算是指数据仓库或数据湖对其存储的数据记录执行计算的方式。这个引擎允许用户“查询”数据、摄取数据、转换数据。通常,这些计算是通过 SQL 表达的。这是数据湖与数据仓库重叠的另一个领域。Snowflake 的 Snowpark 支持多种编程语言,例如 Java、Python 或 Scala,然后将其作为 SQL 函数执行。后期他们还推出了 Snowpark Python,这是一种原生 Python 体验,带有 pandas 和类似 PySpark 的 API,无需编写冗长的 SQL 即可进行数据操作。另一方面,Spark SQL 可以帮助将 Python、R 和 Scala 等语言转换为 SQL 命令。
为什么需要数据仓库
数据仓库是完全集成和管理的解决方案,使其易于构建和开箱即用。使用数据仓库时,企业通常使用由单一供应商构建和运营的单一解决方案中的元数据、存储和计算。在数据湖与数据仓库讨论中,考虑数据仓库通常需要更多的结构和模式,这通常会强制要求更好的数据卫生,并在读取和使用数据时降低复杂性。由于其预先打包的功能和对 SQL 的强大支持,数据仓库促进了快速、可操作的查询,使其非常适合数据分析团队。
为什么需要数据湖
在数据湖与数据仓库的争论中,数据湖是数据仓库的 DIY 版本,允许数据工程团队根据需要选择他们想要使用的各种元数据、存储和计算技术他们的系统。数据湖非常适合希望构建更加定制化平台的数据团队和数据科学家,通常由少数(或更多)数据工程师提供支持。
数据湖的一些共同特征包括:
(1)解耦存储和计算:此功能不仅可以节省大量成本,而且还有助于解析和丰富数据以进行实时流式传输和查询。
(2)支持分布式计算:分布式计算有助于支持大规模数据处理的性能,因为它允许更好的分段查询性能、更多的容错设计和卓越的并行数据处理。
(3)定制和互操作性:由于其“即插即用”的特性,数据湖支持数据平台的可扩展性,随着公司数据需求的发展和成熟,堆栈的不同元素可以轻松地协同工作。
(4)主要基于开源技术:这有助于减少供应商锁定,并提供出色的定制化,这对于拥有大型数据工程团队的公司非常有效。
(5)处理非结构化或弱结构化数据的能力:数据湖可以支持原始数据,这意味着您在处理数据时具有更大的灵活性,非常适合数据科学家和数据工程师。使用原始数据可以让您更好地控制聚合和计算。
(6)支持复杂的非 SQL 编程模型:这是数据湖与数据仓库的一个区别点。与大多数数据仓库不同,数据湖支持 Apache Hadoop、Apache Spark、PySpark 和其他用于高级数据科学和机器学习的框架。
湖仓一体是什么
选择数据湖还是数据仓库的决策已经足够艰难,但另一种选项也已经出现,尤其是在数据工程团队中。这是一种结合了数据仓库和数据湖功能的解决方案,其将传统数据分析技术与为更高级计算(如机器学习)构建的技术相结合。当云仓库提供商开始添加提供湖式优势的功能(例如 Redshift Spectrum 或 Delta Lake)时,湖仓一体首次出现。同样,数据湖一直在添加提供仓库式功能的技术,例如 SQL 功能和模式。今天,数据湖与仓库的差异正在缩小。
如何选择
数据湖与数据仓库的选择,并不是一个简单的答案。无论我们在数据湖还是数据仓库决策中选择什么,应该遵循以下的一些规则:
(1)选择合适的解决方案对应公司数据目标。如果公司仅在少数几个工作流程中定期使用一个或两个关键数据源,那么从时间和资源方面而言,从头开始构建数据湖可能没有意义。但是,如果公司正在尝试使用数据来为阳光下的一切提供信息,那么湖仓一体解决方案可能为跨角色用户提供快速、可操作的 Know-how。
(2)了解核心用户是谁。公司的数据平台的主要用户是否是商业智能团队,分布在几个不同的职能部门?一个专门的数据工程师团队怎么样?还是几组数据科学家对各种数据集进行 A/B 测试?
(3)数据的可观察性。数据仓库、数据湖、湖仓一体:所有三种解决方案(以及它们的任意组合)都需要采用整体方法来处理数据治理和数据质量。毕竟如果数据损坏、丢失或以其他方式不准确,那么我们的管道有多先进并不重要。一些最好的数据团队正在利用数据可观察性,这是一种端到端的方法来监控和警告数据管道中的问题。总结来说,与其说数据仓库和数据湖的选择,是选择一种工具或另一种工具,不如说是为工作选择正确的工具。
说了这么多,让我们回到时序数据库场景,是否未来时序数据会专为进入到一个数据湖中,然后多种数据湖汇总关联在数据仓库中查询呢?譬如:“多系统共存是企业中比较常见的架构,例如一个数据湖,加上多个数据仓库,以及其他的专用系统,例如流、时间序列、图形和图像数据库等。”一切还需时间给出答案。
CnosDB 简介
CnosDB 是一款高性能、高易用性的开源分布式时序数据库,现已正式发布及全部开源。
欢迎关注我们的代码仓库,一键三连:https://github.com/cnosdb/cnosdb
版权声明: 本文为 InfoQ 作者【CnosDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/7f04ec0b6f2ea7d7f309a70b2】。文章转载请联系作者。
评论