一个理想的数据湖应具备哪些功能?

2023-02-28 11:16:17 浏览数 (2)

介绍

从数据库到数据仓库,最后到数据湖[1],随着数据量和数据源的增加,数据格局正在迅速变化。数据湖市场预计增长近 30%[2],将从 2020 年的 37.4 亿美元增长到 2026 年的 176 亿美元。此外从 2022 年数据和人工智能峰会[3]来看,数据湖架构[4]显然是数据管理和治理的未来。由于 Databricks[5] 发布了 Delta 2.0,该趋势可能会增长,该平台的所有 API 都将是开源的。此外Snowflakes[6] 在其峰会上宣布了一些改变游戏规则的功能,使数据湖成为该行业的支柱。治理、安全性、可扩展性以及对分析和交易数据的无缝分析,将会推动该领域创新。

数据湖基本剖析

根据 Hay、Geisler 和 Quix(2016 年)的说法,数据湖的三个主要功能是从多个数据源提取原始数据,将其存储在安全的存储库中,并允许用户通过直接查询数据湖来快速分析所有数据。数据湖由三个部分[7]组成。数据存储、数据湖文件格式和数据湖表格式。所有这些都有助于实现上述功能,并作为数据湖的基石。 数据湖架构[8]通过其数据存储组件存储来自各种来源的数据,例如传统数据库、Web 服务器和电子邮件。数据湖文件格式用作数据处理单元,其中数据源以面向列的格式压缩以优化查询和探索。最后数据湖表格式通过将所有数据源聚合到一个表中来帮助进行数据分析。因此更新一个数据源将更新所有其他数据源,就好像它们都在一个表中一样。典型的数据存储平台包括 AWS S3[9]、Google Cloud Storage[10] 和 Azure[11]数据湖。Apache Parquet 或 Avro 是一些通用的数据湖文件格式,Apache Hudi[12]、Apache Iceberg[13] 和 Delta Lake[14] 是众所周知的数据湖表格式。

理想的数据湖功能列表

数据湖已成为必需品,而不是可有可无的东西。但这并不意味着组织会盲目地对其进行投资。不同的情况需要不同的功能集。下面列出了理想情况下数据湖应具备的所有功能。

扩展元数据的能力

高效的元数据管理[15]对于数据湖保持数据质量至关重要,以便更广泛的用户可以轻松理解不同数据集并从中获得见解。Darmont 和 Sawadogo (2021) 指出,数据湖中的数据没有明确的格式,这意味着如果没有元数据来描述相关模式,它会很快成为浪费的资产。数据湖系统应具有的三个级别的元数据。首先它应该提供业务级别的信息以增强对数据集的理解;其次操作元数据应涵盖数据处理过程中产生的信息,而技术元数据应明确描述模式。

支持 ACID 事务

不支持 ACID 事务的数据湖可能会给数据治理带来相当大的麻烦。ACID 代表 Atomicity、Consistency、Isolation 和 Durability 的首字母缩写词。

  • • 原子性确保只有完成的数据进程才会影响数据源。因此如果更新中途失败,则不会添加任何行
  • • 一致性通过施加唯一标识符、支票账户中的正余额等约束来维护数据完整性
  • • 隔离可防止并发操作交互
  • • 持久性有助于即使在系统出现故障后也能保持最新的数据状态

支持 DML 操作

数据库操作语言 (DML)[16]是一组命令,可让用户操作数据库中的数据。例如 SQL 是一种 DML,允许用户编写 SELECT、INSERT、DELETE、UPDATE 和 MERGE 等命令来对数据执行特定操作。支持 DML 的数据湖通过让用户轻松保持源表和目标表之间的一致性,简化了治理和审计以及变更数据捕获 (CDC)。例如用户可以使用 UPDATE 命令以根据特定过滤器将源表中检测到的变更传递到目标表。

构建和维护模式的灵活性

数据湖相对于数据仓库的优势之一是数据湖提供了模式演变的灵活性[17]。数据仓库在存储特定数据集之前需要预定义的模式,而数据湖不需要这样的模式。有效的数据湖具有数据存储系统,可以自动从存储的结构化和非结构化数据源中推断模式。这种推断通常称为读取时模式而不是写入时模式,后者适用于数据仓库的严格模式结构。

跟踪行级表更改

Delta Lake[18] 和 Snowflake[19] 等数据湖允许用户在行级别跟踪和捕获对表所做的更改。该功能是 CDC 的一部分,其中数据湖在单独的日志中记录由于 UPDATE、DELETE 或 INSERT 事件对源表所做的任何更改。这种跟踪在多个用例中都有帮助,例如通过仅处理更改来优化 ETL 过程,仅使用新信息而不是整个表更新 BI 仪表板,以及通过将所有更改保存在更改日志中来帮助审计。

维护审计日志、回滚和时间旅行

如果数据湖缺乏版本控制系统,管理大数据[20]将是一项挑战。如果存在实时数据摄取,这意味着新数据不断涌入,这将变得特别麻烦。如果一些坏数据进入数据流,清理这么大的数据量会非常困难。因此数据湖必须支持自动版本控制[21],允许用户跟踪并在需要时回滚到以前的版本,从而允许时间旅行,并简化数据管道的管理以保持数据的完整性和质量。

数据(表)恢复

当今的企业经常将大量数据从一个环境迁移到另一个环境,以使用经济高效的数据解决方案。但是在数据湖上进行此类临时迁移可能会导致不可逆转的挫折,从而导致企业失去宝贵的数据资产。因此数据湖应该具有内置的恢复功能,让用户可以通过简单的命令使用安全备份恢复相关表的先前状态。

自动调整文件大小

在处理大型文件系统(如大数据应用程序中的文件系统)时,文件大小会迅速增长。基于 Hadoop 数据集群的传统数据湖无法根据数据量调整文件大小[22]。结果会导致系统创建很多文件,每个文件的大小都比较小,从而占用了大量不必要的空间。高效的数据湖应根据传入数据量自动调整文件大小。例如 Delta Lake/Apache Hudi 允许用户指定目标表的文件大小,或者让系统根据工作负载和表的整体大小自行调整大小。较大的表保证较大的文件大小,以便系统创建较少的文件。

托管清理服务

大多数数据湖架构中缺乏有效的数据清理机制[23]是一个明显的弱点,会导致数据湖迅速变成数据沼泽。由于数据湖在没有预定义模式的情况下摄取数据,因此随着数据量和类型的增加,数据发现会变得复杂。因此,像 Snowflake[24] 这样的数据湖平台在数据摄取阶段施加了一定的约束,以确保传入的数据没有错误或不一致,否则可能会在以后导致分析不准确。

索引管理

索引表可以使数据湖加速查询执行[25],使用索引而不是遍历整个数据集来提供结果。在 SQL 查询中应用过滤器时,索引特别有用,因为它简化了搜索。元数据管理也可以发挥作用,因为它定义了数据表的特定属性以便于搜索。但是像 Snowflake 这样的数据湖不使用索引[26],因为在庞大的数据集上创建索引可能很耗时[27]。相反,它计算表的列和行的特定统计信息[28],并将这些信息用于查询执行。

托管数据摄取服务

数据湖中的数据摄取功能有时没有明确的优先级,因为数据湖的工作原则是“现在存储,以后分析”[29] 然而这很快就会成为瓶颈,数据湖将变成数据沼泽而无法进行数据分析。因此数据湖应该有一些机制来提供数据的早期可视化,让用户了解数据在摄取过程中包含的内容。

支持批量加载

虽然不是必须的,但当数据需要偶尔大量加载到数据湖时,批量加载非常有必要[30]。与增量加载数据不同,批量加载有助于加快流程并提高性能。然而更快的速度有时可能只是一件好事,因为批量加载可能会忽略确保只有干净数据进入湖中的约束[31]。

支持并发

本地数据架构的问题之一是它们无法提供高并发性[32],这意味着同时为多个用户提供服务是一件麻烦事。云平台解决了这个问题,但由于数据仓库的限制,高并发仍然是一个问题。以大数据分析着称的Apache Spark等开源平台无法支持高并发。然而 Databricks 等数据湖解决方案是为数不多的支持高并发的解决方案之一,尽管它们在低延迟(响应用户请求所需的时间)方面还可以继续改进。

支持数据共享

随着数字化步伐的不断加快,数据共享[33]已成为当下的需求。由于数据被不同的团队用于多个用例,通过数据目录系统进行无缝数据共享对于数据驱动的决策制定和防止业务领域之间的孤岛是必要的。数据湖不仅应该提供跨平台无缝共享数据的方法,而且还应该安全可靠地这样做,因为由于访问控制薄弱,数据安全可能成为一个问题。

数据分区

数据分区为跨多个表或站点分布数据以加速查询处理并简化数据管理。AWS 等 Lakehouse[34] 平台建议对数据进行分区以实现可扩展性和安全性,因为分区可以防止单个数据源占用大量空间并将敏感数据与非敏感数据分开。

数据安全

由于数据湖依赖于低成本的开源技术并存储半结构化和非结构化数据,因此敏感数据可能会被误用。因此数据湖应该允许集中控制,其粒度甚至可以扩展到行级别的控制访问,以确保符合监管标准。

数据分析

数据湖是一种大数据分析解决方案,它以各种格式摄取数据并为数据科学家等不同用户提供服务,用于机器学习和商业智能等用例,同时确保数据质量和安全性。因此数据湖的目标之一是帮助用户执行高级分析并构建可推动业务能力发展的人工智能系统。

数据治理

有效的数据治理对于数据湖存储有价值的数据至关重要。事实上组织需要构建一个数据湖解决方案,在数据访问和数据控制之间提供最佳基础。随着数据共享成为跨多个平台的常态,数据湖架构必须具有维护数据质量和完整性的流程。对于多个用户同时访问不同类型数据的云数据湖,这些流程变得特别有用。

引用链接

[1] 数据湖: [https://www.integrate.io/glossary/what-is-data-lake/](https://www.integrate.io/glossary/what-is-data-lake/) [2] 增长近 30%: [https://www.starburst.io/blog/five-exciting-big-data-trends-worth-taking-a-closer-look/](https://www.starburst.io/blog/five-exciting-big-data-trends-worth-taking-a-closer-look/) [3] 2022 年数据和人工智能峰会: [https://www.databricks.com/blog/2022/07/25/recap-of-databricks-lakehouse-platform-announcements-at-data-and-ai-summit-2022.html](https://www.databricks.com/blog/2022/07/25/recap-of-databricks-lakehouse-platform-announcements-at-data-and-ai-summit-2022.html) [4] 数据湖架构: [https://www.integrate.io/blog/data-lake-architecture-guide/#how](https://www.integrate.io/blog/data-lake-architecture-guide/#how) [5] Databricks: [https://www.databricks.com/](https://www.databricks.com/) [6] Snowflakes: [https://www.snowflake.com/blog/four-customer-takeaways-from-summit-2022/](https://www.snowflake.com/blog/four-customer-takeaways-from-summit-2022/) [7] 三个部分: [https://airbyte.com/blog/data-lake-lakehouse-guide-powered-by-table-formats-delta-lake-iceberg-hudi](https://airbyte.com/blog/data-lake-lakehouse-guide-powered-by-table-formats-delta-lake-iceberg-hudi) [8] 数据湖架构: [https://www.integrate.io/blog/data-lake-architecture-guide/](https://www.integrate.io/blog/data-lake-architecture-guide/) [9] AWS S3: [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/) [10] Google Cloud Storage: [https://cloud.google.com/storage](https://cloud.google.com/storage) [11] Azure: [https://learn.microsoft.com/en-us/azure/storage/common/storage-introduction](https://learn.microsoft.com/en-us/azure/storage/common/storage-introduction) [12] Apache Hudi: [https://hudi.apache.org/](https://hudi.apache.org/) [13] Apache Iceberg: [https://iceberg.apache.org/](https://iceberg.apache.org/) [14] Delta Lake: [https://delta.io/](https://delta.io/) [15] 高效的元数据管理: [https://www.oreilly.com/content/tips-for-managing-metadata-in-a-data-lake/](https://www.oreilly.com/content/tips-for-managing-metadata-in-a-data-lake/) [16] 数据库操作语言 (DML): [https://www.techopedia.com/definition/1179/data-manipulation-language-dml](https://www.techopedia.com/definition/1179/data-manipulation-language-dml) [17] 模式演变的灵活性: [https://medium.com/ssense-tech/schema-evolution-in-data-lakes-f956c6f978d4](https://medium.com/ssense-tech/schema-evolution-in-data-lakes-f956c6f978d4) [18] Delta Lake: [https://docs.databricks.com/delta/delta-change-data-feed.html](https://docs.databricks.com/delta/delta-change-data-feed.html) [19] Snowflake: [https://docs.snowflake.com/en/user-guide/streams.html](https://docs.snowflake.com/en/user-guide/streams.html) [20] 大数据: [https://www.integrate.io/glossary/what-is-big-data/](https://www.integrate.io/glossary/what-is-big-data/) [21] 自动版本控制: [https://medium.com/@aravinthR/delta-time-travel-for-data-lake-part-2-b23879a4bc6d](https://medium.com/@aravinthR/delta-time-travel-for-data-lake-part-2-b23879a4bc6d) [22] 无法根据数据量调整文件大小: [https://www.qubole.com/blog/data-lake-essentials-part-2-file-formats-compression-and-security](https://www.qubole.com/blog/data-lake-essentials-part-2-file-formats-compression-and-security) [23] 数据清理机制: [https://www.integrate.io/glossary/what-is-data-cleansing/](https://www.integrate.io/glossary/what-is-data-cleansing/) [24] Snowflake: [https://www.snowflake.com/trending/data-cleansing](https://www.snowflake.com/trending/data-cleansing) [25] 加速查询执行: [https://qbeast.io/indexing-and-sampling-on-data-lakehouses-with-qbeast-spark/](https://qbeast.io/indexing-and-sampling-on-data-lakehouses-with-qbeast-spark/) [26] Snowflake 这样的数据湖不使用索引: [https://popsql.com/learn-sql/snowflake/how-to-create-an-index-in-snowflake](https://popsql.com/learn-sql/snowflake/how-to-create-an-index-in-snowflake) [27] 创建索引可能很耗时: [https://medium.com/doctrine/making-queries-100x-faster-with-snowflake-ee2a76d8150d](https://medium.com/doctrine/making-queries-100x-faster-with-snowflake-ee2a76d8150d) [28] 列和行的特定统计信息: [https://stackoverflow.com/questions/58491962/does-snowflake-support-indexes](https://stackoverflow.com/questions/58491962/does-snowflake-support-indexes) [29] “现在存储,以后分析”: [https://www.upsolver.com/blog/7-guidelines-ingesting-big-data-lakes#:~:text=Data lake ingestion is simply,received in the stream processor](https://www.upsolver.com/blog/7-guidelines-ingesting-big-data-lakes#:~:text=Data lake ingestion is simply,received in the stream processor) [30] 批量加载非常有必要: [https://blogs.perficient.com/2018/03/19/managing-huge-data-loads-using-bulk-load-in-informatica/#:~:text=Advantages: The major advantage of,the bypass of database logs.](https://blogs.perficient.com/2018/03/19/managing-huge-data-loads-using-bulk-load-in-informatica/#:~:text=Advantages: The major advantage of,the bypass of database logs.) [31] 批量加载可能会忽略确保只有干净数据进入湖中的约束: [https://bryteflow.com/bulk-loading-data-to-cloud-data-warehouses/](https://bryteflow.com/bulk-loading-data-to-cloud-data-warehouses/) [32] 高并发性: [https://medium.com/@fpatano/high-concurrency-and-low-latency-on-data-lakes-with-lakehouse-c9394a10f2e8](https://medium.com/@fpatano/high-concurrency-and-low-latency-on-data-lakes-with-lakehouse-c9394a10f2e8) [33] 数据共享: [https://www.integrate.io/glossary/inter-enterprise-data-sharing/](https://www.integrate.io/glossary/inter-enterprise-data-sharing/) [34] Lakehouse: [https://www.integrate.io/glossary/what-is-a-data-lakehouse/](https://www.integrate.io/glossary/what-is-a-data-lakehouse/)

0 人点赞