paint-brush
如何使用MinIO作为外部表来扩展Snowflakeby@minio
8,167
8,167

如何使用MinIO作为外部表来扩展Snowflake

MinIO6m2023/08/03
Read on Terminal Reader

MinIO 是一种高性能、云原生对象存储。它将适用于所有类型的 Kubernetes(上游、EKS、AKS、GKE 等)以及公共云 VM、VMWare 等虚拟机和裸机硬件。因此,MinIO 可以成为 Snowflake 客户的全球数据存储 - 无论他们的数据位于何处。
featured image - 如何使用MinIO作为外部表来扩展Snowflake
MinIO HackerNoon profile picture
0-item
1-item
2-item

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

MinIO 设置只需满足几个要求即可与 Snowflake 配合使用。


  1. MinIO 必须设置为允许 DNS 样式访问,并且存储桶必须公开可用。
  2. 目前,该区域必须设置为 NULL 或与 Snowflake 实例的区域相同(例如“us-west-2”)。您将从 Snowflake 查询中收到一条错误消息,以便您知道它所期望的区域。


在下面的示例中,存储桶“snowflake”中有 4 个对象,文件夹/子前缀“sn1”中有另一个对象。 Snowflake 将获取所有这些对象。


为了将其与 Snowflake 集成,如果 MinIO 服务器位于https://play.min.io ,则应该可以通过https://snowflake.play.min.io访问存储桶


示例文件位于https://docs.snowflake.com/en/user-guide/getting-started-tutorial-precessions.html#sample-data-files-for-loading




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

使用 Snowflake CLI (SnowSQL)

可以使用 Snowflake CLI (SnowSQL) 执行相同的命令。


您可以在此处找到有关如何在您的平台上安装 SnowSQL 的说明: https://docs.snowflake.com/en/user-guide/snowsql-install-config.html


唯一的区别是你必须从命令开始


$ Snowsql -a <帐户标识符> -u <用户名>


帐户标识符的格式为<组织名称>-<帐户名称>。您可以从 Snowflake 控制台的管理页面找到它。



概括

就是这样。


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


也发布在这里