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 命令,就像它只是另一个表一样。
例如:从Bucket1中选择*;
与 Snowflake 中的大多数功能一样,连接到 MinIO 上存储的数据也相对简单。
以下是您开始使用时所需要的:
需要为您的 Snowflake 环境启用外部表支持。如果您收到类似“在:‘ s3compat://snowflake/ ’中发现无效的 URL 前缀”之类的错误,则可能意味着它未启用。请联系您的 Snowflake 代表以启用它。
MinIO 设置只需满足几个要求即可与 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 CREATE EXTERNAL TABLE 命令的参考可在此处找到: https ://docs.snowflake.com/en/sql-reference/sql/create-external-table.html
可以使用 Snowflake CLI (SnowSQL) 执行相同的命令。
您可以在此处找到有关如何在您的平台上安装 SnowSQL 的说明: https://docs.snowflake.com/en/user-guide/snowsql-install-config.html
唯一的区别是你必须从命令开始
$ Snowsql -a <帐户标识符> -u <用户名>
帐户标识符的格式为<组织名称>-<帐户名称>。您可以从 Snowflake 控制台的管理页面找到它。
就是这样。
如果您是 MinIO 客户,希望添加 Snowflake 功能,或者您是 Snowflake 客户,希望将其功能扩展到 Snowflake 外部存储的数据,请尝试一下。无论哪种方式,您都可以从当前的投资中获取更多收益。
也发布在这里。