Snowflake作为一个云数据仓库平台,自诞生以来迅速崛起,成为拥有数千客户的大型零售商。企业纷纷采用Snowflake作为从本地企业数据仓库(如Teradata)迁移的替代方案,或作为现有云数据仓库(如Amazon Redshift或Google BigQuery)的更灵活、可扩展且易于管理的替代品。
由于Snowflake通常代表着重大投资,一些数据团队考虑将其应用于每一种用例。这不可避免地导致组织将数据湖与Snowflake以及其他云数据仓库进行比较。数据湖是近十年出现的另一种数据平台,最初作为Hadoop的本地安装出现,现在在云端,基于自然对象存储构建。
数据湖提供低成本的对象存储原始数据,并依赖外部查询工具使用高可用的计算资源分析大型数据集。由于它们访问的是文件系统而不是结构化格式,未经优化的数据湖性能并不高。但一旦优化,它们可以极具成本效益,尤其是在规模上。它们还非常适合处理流数据。
数据仓库存储结构化数据的专有格式,通过紧密耦合的查询层进行分析访问。与未经优化的数据湖相比,计算速度较高,但也更昂贵。
与其他数据仓库一样,Snowflake需要适当的数据格式,适用于结构化和半结构化(但不适用于非结构化)数据,并需要其查询引擎。然而,它与传统数据仓库在两个关键方面有所不同:
这些改进最初使Snowflake在市场上与Teradata和Redshift区分开来。然而,每个都试图匹配这些属性——Teradata通过其Vantage云服务和Amazon通过将计算和存储分离的Redshift。因此,这些服务现在与云数据湖共享这两个属性,这可能会增加关于何时使用哪个服务的混乱。
尽管Snowflake提供了存储与计算的一些分离,但由于其依赖专有数据格式和结构化存储,它不能被视为数据湖。数据湖建立在广泛访问数据和选择不同计算查询及数据工具的能力之上;尽管Snowflake作为仓库具有所有优势,但它并不提供某些功能。
Snowflake不是数据湖。但是,有没有理由不将所有信息存储在Snowflake上,并依赖其快速处理数据的能力?应该考虑的一个原因是成本。
当然,成本在决定如何使用不同的分析平台时至关重要。使用Snowflake在高速下对大量数据运行复杂查询可能会显著增加成本。
Snowflake的收费基于虚拟数据仓库(VDW)运行的时间,加上VDW大小(核心数)和预付费功能集(企业、标准或业务关键)。对于给定的VDW,费率与VDW的负载相同。这与数据湖不同,数据湖提供现货定价;较便宜的实例可以处理较小的数据包。
Snowflake以其专有格式处理数据,Snowflake接受的数据转换可能成本高昂。由于接收数据流创建了持续负载,它可以保持Snowflake VDW计费器全天候运行。由于Snowflake不对给定虚拟数据存储大小的5%或80%负载收取不同的费用,这些成本可能很高。
许多人对Snowflake和Databricks感到困惑。Snowflake的方法与Databricks自称的Lakehouse工具相比如何,两者之间的差异有多大?查看Databricks与Snowflake比较,找出答案。
上述内容并不意味着贬低Snowflake或建议它不应该成为整体解决方案的一部分。Snowflake是一个方便的数据仓库,应该被视为提供可预测且快速的分析性能的方法。然而,通过将其作为开放、优化的数据湖架构的一部分,可以确保获得所有(或大多数)Snowflake的优势,同时控制云成本。
使用优化的数据湖和像Snowflake这样的云数据仓库,公司可以根据成本和性能要求对不同的用例应用不同的模式。
可以使用便宜的数据湖存储并保留所有数据——不仅仅是最近或结构化的数据。数据转换和准备在数据湖中可能比在Snowflake中便宜得多,特别是对于流数据。
在选择查询工具时不受限制,可以直接查询数据湖或根据需要将其发送到Snowflake。有了搜索引擎、时间序列数据库或ML/AI工具等额外工具,可以保持最大的灵活性和敏捷性,随心所欲地处理其他数据。
使用AWS Glue或Apache Spark等工具手动准备数据湖中的数据通常是资源密集型的。这里将使用Upsolver的数据湖工程平台。Upsolver在数据湖之上提供了一个低代码、自助服务、优化的计算层,使其成为一个强大的成本效益高的分析服务存储库。
Upsolver包括数据湖工程最佳实践,以使处理高效,自动化每个数据湖都需要的基本但耗时的数据管道工作。它包括:
Upsolver尽可能使用低成本计算选项,如AWS Spot EC2实例,以降低查询成本。这可以将计算成本降低10倍,与标准EC2相比,比数据仓库便宜得多。
Upsolver正确处理UPSERTS表,这意味着可以从流数据中连续加载表,即使数据和模式发生变化,也能保持最新。
使用Upsolver通过可视化SQL IDE对数据进行规范化、过滤、聚合和连接,以创建转换。然后,直接在数据湖中运行这些转换,然后将其写入Snowflake(包括连接、聚合、丰富等)或从Snowflake的SQL查询引擎查询它们作为外部表。
将Snowflake与Upsolver的数据丰富的数据湖结合起来,可以让在成本和分析工具选择方面运行最有意义的处理。
甚至可以使用Upsolver直接将数据连续转换并流式传输到Snowflake。
首先,也是最重要的,要清楚哪些数据流必须发送到Snowflake,哪些可以以原始格式存储在湖中以用于其他目的。(记住不要在Snowflake上保留古老的数据;Athena是查询大型数据集的更好工具。)然后设计架构,以便转换后的流数据自动发送到Snowflake。
在这个参考架构中,Snowflake只是几个数据消费者之一。数据针对每个消费者进行了优化(有时是显著的)。在某些情况下,准备的数据最适合在数据湖上使用查询工具如Athena进行经济查询;在其他情况下,输出到专业数据存储:
有了这样的开放数据湖架构,可以在数据湖中保留原始数据的单一真相版本,此外,还可以提炼和分发数据以满足特定目的。
Snowflake是一种新型数据仓库。它通过基于消费的定价模型和存储与计算的分离,提供了比传统方法更多的优势。然而,它并不是每个任务的最佳工具,尤其是在成本方面,比如运行流数据的持续任务。它也是一个封闭系统,这降低了分析的长期灵活性。