我们中的许多人都根据后来发展的需求对数据进行了更改。当我们意识到这一点时,回滚就变得不可能了。变化不仅仅是一个常数;而是一个常数。它是管理数据的重要组成部分,需要采用复杂的方法。输入 Dremio 数据目录 Nessie 的类似 Git 的功能。 正如 Git 已成为软件开发的基础一样,数据工程师也需要类似的工具来并行工作、比较数据版本、促进生产更改并在需要时回滚数据。 Nessie 为数据工程师提供了类似 Git 的版本控制系统,用于管理数据版本、分支、合并和提交。当多个数据工程师同时处理和转换数据时,这非常有帮助。 Nessie 允许每个工程师在不同的分支中工作,同时以主分支的形式维护单一事实来源。此功能使数据工程团队能够在面对不断变化的情况下协作维护数据质量。 本文提供了分步指南,演示 Nessie、Dremio 和 MinIO 如何协同工作以提高数据工程工作流程中的数据质量和协作。无论您是数据工程师、机器学习工程师,还是现代数据湖爱好者,此博客都可以为您提供有效增强数据版本控制实践所需的知识和工具。 了解基础知识:Nessie 工作负载 Nessie 允许类似 Git 的工作负载,让您可以测试、开发并推送到生产环境。让我们分解一些关键概念: 就像在 Git 中一样,Nessie 中的分支允许您同时处理不同的数据工程任务。例如,您可能有一个用于功能开发、数据清理和数据转换的分支。每个分支都可以有自己的一组数据更改。 分支: 在 Nessie 中,提交代表特定时间点的数据快照。当您对数据进行更改时,您会创建一个新的提交来记录这些更改。提交链接到特定分支。当您需要将数据恢复到稳定或已知良好的状态时,Nessie 可以轻松选择特定的提交并回滚到该数据版本。这确保了数据质量和一致性。 提交: :Nessie 允许您将一个分支的更改合并到另一个分支。这类似于合并 Git 中的代码更改。合并分支时,该分支中所做的数据更改将成为目标分支的一部分。 合并 组件 是一个分布式分析引擎,作为开源平台运行,为数据探索、转换和协作工作提供直观的自助服务界面。它的设计基于 一种高速列式存储器格式。 Dremio 阿帕奇箭, 我们已经探索了如何使用 Kubernetes 部署 Dremio,以及如何 。有关 Dremio 的更多信息,请咨询 。 使用 Dremio 查询 MinIO 上的 Iceberg 表 德雷米奥资源 是高性能对象存储。以其卓越的品质而闻名 和 ,MinIO 是构建和维护现代数据湖基础设施的关键组件。 MinIO 使架构师能够在本地、裸机、边缘或任何公共云上高效管理和存储大量数据。 MinIO 速度 可扩展性 是一种开放表格式,适合管理数据湖中的大量数据。时间旅行、动态模式演化和分区演化等独特功能使其成为游戏规则改变者,允许查询引擎安全高效地同时处理相同的数据。看 有关 Iceberg 功能的更多信息。 阿帕奇冰山 使用 Iceberg 和 MinIO 的 Lakehouse 架构权威指南 入门 你将需要 和 对于本教程。如果您还没有两者,最简单的方法是安装 Docker Desktop。 Docker引擎 Docker 组合 这部分教程基于Dremio的 。您可以获得该项目的存储库 。 博客文章 这里 首先,打开终端并导航到您克隆/下载存储库的文件夹,然后运行以下命令来启动 Dremio。 docker-compose up dremio 稍等片刻,然后导航至 以访问 Dremio。更新请求的字段,然后单击下一步。 http://localhost:9047 接下来,运行以下命令来启动 MinIO。 docker-compose up minio 下面的最后一个 命令将启动 Nessie。 docker-compose up docker-compose up nessie 导航到 使用用户名和密码 登录 MinIO。系统会提示您创建存储桶。 http://localhost:9001 minioadmin:minioadmin 创建一个名为 。 iceberg-datalake 然后返回 Dremio ,单击“添加源”并选择“Nessie”。 http://localhost:9047 将名称设置为 nessie 将端点 URL 设置为 http://nessie:19120/api/v2 将身份验证设置为 none 暂时不要单击“保存”。相反,在左侧的导航面板中,单击“存储”。 MinIO 是 S3-API 兼容的对象存储,可以使用与 AWS S3 相同的连接路径。 对于您的访问密钥,设置 minioadmin 对于您的密钥,设置 minioadmin 将根路径设置为 /iceberg-datalake 向下滚动查看下一组说明。 单击 下的 按钮以创建和配置以下属性。 Connection Properties Add Property 为 fs.s3a.path.style.access true 的端点 fs.s3a.endpoint minio:9000 为 dremio.s3.compat true 取消选中 Encrypt connection 然后单击“保存”。您现在应该在数据源中看到 Nessie Catalogs。 创建数据源 在 Dremio 中,导航到左侧的 SQL Runner。确保文本编辑器右上方区域的 设置为我们的 Nessie 源。否则,您将必须引用 等上下文,而不仅仅是 来运行此查询。复制并粘贴下面的 SQL 并运行。 Context nessie.SalesData SalesData CREATE TABLE SalesData ( id INT, product_name VARCHAR, sales_amount DECIMAL, transaction_date DATE ) PARTITION BY (transaction_date); 运行下面的查询将数据插入到您刚刚创建的表中。 INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES (1, 'ProductA', 1500.00, '2023-10-15'), (2, 'ProductB', 2000.00, '2023-10-15'), (3, 'ProductA', 1200.00, '2023-10-16'), (4, 'ProductC', 1800.00, '2023-10-16'), (5, 'ProductB', 2200.00, '2023-10-17'); 导航回 MinIO,可以看到您的数据湖已填充了 Iceberg 表。 与 Nessie 的分支和合并 返回 Dremio,网址为 。首先使用 语法查询主分支上的表: http://localhost:9047 AT BRANCH SELECT * FROM nessie.SalesData AT BRANCH main; 创建 ETL(提取转换和加载)分支,以便您可以在不影响生产的情况下处理和转换数据。 CREATE BRANCH etl_06092023 in nessie 在 ETL 分支中,将新数据插入表中: USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18'); 确认 ETL 分支中新数据的立即可用性: SELECT * FROM nessie.SalesData AT BRANCH etl_06092023; 请注意主分支上用户的更改是隔离的: SELECT * FROM nessie.SalesData AT BRANCH main; 将 ETL 分支的更改合并回主分支: MERGE BRANCH etl_06092023 INTO main in nessie; 再次选择主分支可以看到更改确实已经合并了。 SELECT * FROM nessie.SalesData AT BRANCH main 这种分支策略使数据工程师能够独立处理跨多个表的大量事务。当准备就绪时,数据工程师可以将这些事务合并到主分支内的单个、全面的多表事务中。 结论 这篇博文深入探讨了数据工程中类似 Git 的版本控制的力量,强调了如何 无缝管理数据版本、分支和合并。本分步指南演示了 Nessie 如何与作为对象存储基础的 Dremio 和 MinIO 合作,增强数据工程工作流程中的数据质量和协作。 尼斯湖水怪 让我们知道您的数据湖屋是什么样的 或上 。 你好@minio.io 我们的 Slack 频道 也出现 。 在这里