使用 MinIO 作为外部表来扩展 Snowflake
Snowflake 现在是云数据仓库平台的事实标准。它的架构旨在支持来自管道、ETL、分析和治理的各种数据任务。传统上,所有数据都需要转移到 Snowflake 中,企业才能利用 Snowflake 的功能。
然而,Snowflake 明白企业希望将其数据集成到任何位置,而不必移动数据。因此,随着外部表支持的引入,企业现在将能够实现这一点。
这不仅对 Snowflake 部署的经济性有实际影响,而且对 Snowflake 平台可用于分析和数据科学的数据量也有实际影响。
外部表的可用性不会改变 Snowflake 运行的位置——它仍将专门在三大公共云(AWS、GCP、Azure)中运行。但是,它将消除所有数据都存储在 Snowflake 中以便 Snowflake 对其进行操作的要求。
MinIO 或许是这一变化的最大受益者。MinIO 是一个高性能的云原生对象存储。它适用于所有类型的 Kubernetes(上游、EKS、AKS、GKE 等)以及公共云 VM、VMWare 等虚拟机和裸机硬件。正因为如此,MinIO 可以成为 Snowflake 客户的全球数据存储——无论他们的数据位于何处。
为了保证正确的数据可供正确的用户使用,必须对这些多云数据湖进行细粒度的访问控制。MinIO 与第三方 IDP 集成的能力及其复杂的基于策略的访问控制 (PBAC) 功能确保这不是事后的想法。
虽然 Snowflake 将支持 S3 端点(自然包括其他对象存储),但这些对象存储无法在企业保存数据的所有地方运行。例如,设备不在公共云或 OpenShift 或 Tanzu 上运行。为了实现一致的、数据无处不在的战略,企业需要采用 MinIO。
此外,Snowflake 已成为企业中的关键任务。如此之多,以至于弹性现在正在构建到这些系统中。这种弹性不仅可以解释云中的区域故障,还可以解释整个云的故障。
正如我之前所写的那样,单一云依赖已被证明是糟糕的架构。MinIO 具有随处可用并在私有云、公共云和边缘云之间复制的能力,为多云数据可用性提供了唯一真正的解决方案。
使用简单
那么,它对最终用户来说有多简单?假设您在 MinIO 中有一个名为“Bucket1”的桶。您可以对其进行设置,以便可以在其上运行任何 SnowSQL 命令,就像它只是另一个表一样。
例如:Select * from Bucket1;

与 Snowflake 中的大多数东西一样,连接到存储在 MinIO 上的数据也相对简单。
以下是您需要开始的内容:
设置雪花
需要为您的 Snowflake 环境打开外部表支持。如果您收到类似“在以下位置找到无效的 URL 前缀:‘ s3compat://snowflake/ ’”之类的错误,则可能意味着它未启用。请联系您的 Snowflake 代表以启用它。
设置 MinIO
对 MinIO 设置只有几个要求才能使其与 Snowflake 一起使用。
必须设置 MinIO 以允许 DNS 样式访问,并且存储桶必须公开可用。
目前,该区域必须设置为 NULL 或与 Snowflake 实例的区域相同(例如“us-west-2”)。您将从 Snowflake 查询中收到一条错误消息,以便您知道它期望的是哪个区域。
在下面的示例中,存储桶“snowflake”中有 4 个对象,文件夹/子前缀“sn1”中有另一个对象。Snowflake 将获取所有这些对象。
为了将其与 Snowflake 集成,如果 MinIO 服务器位于https://play.min.io ,则应可通过https://snowflake.play.min.io访问存储桶

MinIO 存储桶可以通过两种方式与 Snowflake 集成。第一个是作为“暂存区”,第二个是作为外部表。让我们看看两者
暂存区访问
作为 ETL 过程的一部分,通常从数据源或数据湖中选择和准备数据,将其移至暂存区,然后加载到仓库中,以便对其运行查询。
传统上,Snowflake 的这些暂存区位于 Snowflake 本身,因此流程如下:
数据湖(本地、公共云等)-> Snowflake staging -> Snowflake 内表
企业现在可以将 MinIO 设置为临时区域,并将数据直接移动到内部 Snowflake 表中以对其运行查询。
这将执行以下操作
简化流程
允许数据更快地用于分析以满足业务需求
确保没有不必要的数据副本,这有助于治理和成本。
新流程将是:MinIO 中的数据(本地、公共云等)-> Snowflake 内部表
以下示例显示在 Snowflake 控制台中,但同样可以通过 Snowflake CLI 运行。
对于play.min.io,使用
AWS_KEY_ID='Q3AM3UQ867SPQQA43P2F'
AWS_SECRET_KEY='zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG'

Snowflake CREATE STAGE 命令的参考可在此处获得: https: //docs.snowflake.com/en/sql-reference/sql/create-stage.html
外部表访问
Snowflake 中的查询必须在内部表上执行。这意味着所有数据——即使是临时查询——也必须移动到 Snowflake。这导致了成本以及无法及时查询。
企业现在可以使用 Snowflake 引入的新外部表访问功能直接访问 MinIO 存储桶中的数据。
初始查询所用的时间将取决于正在传输的数据量,但读取会被缓存,后续查询可能会更快,直到下一次刷新。
使用外部表方法不需要复制数据,并且存储桶可以用作查询、连接等的外部表。
但是,换来的好处是巨大的。
这扩展了仓库的功能,而不会产生搬迁成本。
现在可以对实时数据进行分析。
可以完全避免仅仅为了运行临时查询而移动数据。
在出于合规性或其他业务原因无法移动数据的情况下,可以进行分析。
您仍然可以使用已经熟悉 Snowflake 平台的相同资源获得 Snowflake 功能的所有优势
一个例子如下所示:

Snowflake CREATE EXTERNAL TABLE 命令的参考可在此处获得:https ://docs.snowflake.com/en/sql-reference/sql/create-external-table.html
使用雪花 CLI (SnowSQL)
可以使用 Snowflake CLI (SnowSQL) 执行相同的命令。
您可以在此处找到有关如何在您的平台上安装 SnowSQL 的说明:https ://docs.snowflake.com/en/user-guide/snowsql-install-config.html
唯一的区别是你必须从命令开始
$ snowsql -a
帐户标识符的格式为


概括
就是这样。
如果您是希望添加 Snowflake 功能的 MinIO 客户,或者如果您是希望将其功能扩展到存储在 Snowflake 外部的数据的 Snowflake 客户,请尝试一下。无论哪种方式,您都可以从当前的投资中获得更多收益。