使用 Dremio 在 MinIO 上查询冰山表
MinIO 非常适合存储为企业数据湖提供数据的非结构化、半结构化和结构化数据。数据湖构成了高级分析、人工智能/机器学习和整体数据驱动业务的支柱。作为最佳实践出现的架构是将云原生数据管理、数据探索和分析工具与保存到Apache Iceberg中的 MinIO (一种开放表格式)的数据相结合。其结果是一个可扩展、高性能、高效并与其他云原生工具无缝集成的数据湖。
在之前的博客文章Dremio 和 MinIO on Kubernetes for Fast Scalable Analytics中,我们讨论了如何在 Kubernetes 上设置 Dremio 并查询驻留在 MinIO 中的数据。MinIO 是 S3 兼容的、Kubernetes 原生的并且是地球上最快的对象存储。MinIO 具有可帮助您充分利用数据湖的特性和功能,可保证持久性和不变性。安全性补充了功能:MinIO 加密传输中和驱动器上的数据,并使用 IAM 和基于策略的访问控制 (PBAC) 来规范对数据的访问。
在本文中,我们将设置 Dremio 以从 Minio 读取 CSV 等文件,我们还将访问使用 Spark 创建的 Apache Iceberg 表,如此处所示。如果您还没有设置 Dremio 和 MinIO,则需要按照上一篇文章中的演练进行操作。要了解有关使用 Iceberg 和 MinIO 构建数据湖的更多信息,请参阅The Definitive Guide to Lakehouse Architecture with Iceberg and MinIO。
添加 MinIO 作为数据源
Dremio 启动并运行后,登录并单击Add Source左下角的

然后选择Amazon S3下Object Storage

填写Name连接器的详细信息,AWS Access Key,AWS Access Secret在下面Buckets,请添加openlake如下所示

接下来,选择Advanced Options左侧菜单,点击Enable compatibility mode,新增2个Connection Properties
fs.s3a.endpoint - play.min.io
fs.s3a.path.style.access - 真
添加openlake到Allowlisted buckets并点击save如下图所示

访问 CSV 文件
让我们使用taxi-data.csv之前在 Spark-Iceberg 博文中使用的 。如果您还没有完成该教程,请按照这些说明将数据导入 MinIO。单击openlake我们刚刚设置的数据源

导航到openlake/spark/sample-data,您应该会看到该taxi-data.csv文件。点击Format File如下图

Dremio 应该能够推断出 CSV 文件的架构,但我们需要调整一些内容,如下所示

单击Save,您应该导航到 SQL 编辑器。让我们运行一个简单的查询来查看数据
加载数据和计算计数需要一些时间。完成后,您应该会看到如下所示的结果

完成上述查询需要 2 分钟多一点,具体取决于数据大小和 Dremio 可用的计算资源。
我们可以执行其他查询操作,但我们将无法使用 Dremio 更改列名或时间旅行到以前版本的数据。为此,我们将使用 Apache Iceberg。
访问冰山表
我们将继续使用nyc.taxis_large我们在本文中创建的 Iceberg 表来使用 Dremio 访问数据。点击openlake我们刚刚设置的数据源

导航到openlake/warehouse/nyc,您应该会看到taxis_large。单击Format File,Dremio 应该能够推断 Iceberg 表的架构,如下所示

单击Save,您将被带到 SQL 编辑器。让我们运行一个简单的查询来查看数据
现在我们已经看到 Iceberg 给我们的数据湖带来的第一个好处。查询执行时间比 CSV 文件快得多,<1s如下所示

注意:我们看到了表中的所有记录,因为我们按照使用 Spark 管理 Iceberg 表中的说明通过 Iceberg 的时间旅行切换到表的最早快照。
在撰写本文时,Dremio 不支持通过快照进行时间旅行或提供对任何元数据表的访问,因此我们将无法充分利用Iceberg 的功能并访问以前快照中的数据。我们可以使用像 Spark 这样的处理引擎来访问以前快照中的数据。
更新表操作
让我们fare_per_distance通过除以填充列fare,trip然后查询数据。您可以在 SQL 编辑器中一次性执行以下查询
在上面的查询中,我们从 Iceberg 表中获取前 15 条记录。在那里我们会注意到fare_per_distanceis null,然后我们执行UPDATE查询来填充该fare_per_distance列。最后,我们再次获取前 15 条记录,现在我们看到该fare_per_distance列已填充。



删除表操作
让我们尝试从表中删除一些记录。您可以在 SQL 编辑器中一次性执行以下查询



上面我们先删除fare_per_distance大于4.0或者距离大于2.0的记录,再删除为fare_per_distancenull的记录,最后统计表中记录的条数。
监控作业
Jobs我们可以通过单击菜单左侧的选项卡来监控 Dremio 中正在运行或已经完成的作业,如下所示

可以根据用户的需要根据各种参数过滤作业。
我们还可以通过单击作业名称来查看作业的详细信息,例如总执行时间的内存使用明细等,如下所示。

我们现在已经设置了 Dremio 以从 MinIO 读取数据并访问使用 Spark 创建的 Iceberg 表。我们演示的过程可以轻松应用于数据湖的分析。
使用 Iceberg、Dremio 和 MinIO 保持冷静
这篇博文引导您使用 Dremio 处理保存到 MinIO 的 Iceberg 表。围绕 Apache Iceberg 的开源社区是活跃的、充满活力的和强大的。不断添加新功能和集成。Iceberg 的快速采用意味着有大量兼容的应用程序框架和学习资源可用。
MinIO 旨在为数据湖以及运行在其上的分析和 AI 提供支持。MinIO 包括许多优化,用于处理由许多小文件组成的大型数据集,这在当今的任何开放表格式中都很常见。可扩展性和高性能的结合使每一个工作负载,无论多么苛刻,都触手可及。有关详细信息, 请参阅我们最新的基准测试。
今天在MinIO上试用 Dremio 。如果您有任何疑问或想分享技巧,请通过我们的Slack 频道联系我们或在 sales@minio.org.cn 上给我们留言。