Snowflake 数据转换

2025 年 1 月 29 日 | 阅读 15 分钟

任何数据驱动型企业都必须将数据转换作为其基础。它是将未处理的数据(通常来自多个来源和格式)转换为清晰、一致且可用形式的过程。这可以包括从清理差异和保证数据完整性到转换不同文件格式的任何内容。

在您希望共享记录以进行进一步分析的任何地方,以及在统计集成、迁移、数据仓库和培训方法中,信息转换都是至关重要的。

Data Transformation Snowflake

这可能包括执行以下操作:

转换数据类型:确保信息以正确的格式(文本、数字、日期等)存储。

  • 重复项删除:为提高准确性,删除重复的数据项。
  • 数据丰富:通过添加上下文或缺失的事实来改进原始统计数据的过程称为数据丰富。如果执行得当,数据转换可确保您的数据是
  • 可访问:易于查找和获取以供检查。
  • 一致:无论来源如何,始终保持一致的结构。
  • 安全:免受篡改或未经授权访问的保护。
  • 可信:能够根据信息和可靠性做出决策。

何时应使用 Snowflake 转换?

是否在将数据加载到 Snowflake 之前、期间或之后进行转换,取决于几个重要变量,包括用例、数据复杂性和性能限制。

  • 加载前转换:通过在将数据摄取到 Snowflake 之前进行转换,可以优化数据速度、减少数据量并提高整体性能。但是,此策略存在丢失可能需要用于后续分析的重要数据信息的风险。因此,除非您确信已修改的数据将满足所有分析目标,否则通常不建议这样做。
  • 数据加载期间的转换:Snowflake 通过 COPY INTO 和 Snowpipe 等命令提供了这些类型转换的选项,为数据精炼提供了灵活的环境。例如,您可以将 JSON 等组件提取到 Snowflake 表的不同列中。
  • 加载后转换:将原始数据加载到 Snowflake 并进行转换有多种好处,包括:
  • 它无需重新加载数据,并允许您随着业务需求的变化修改查询和数据模型。
  • 专注于加载活动并将转换异步执行,可以实现快速数据摄取,并确保数据可供分析。
  • 数据科学家和分析师可以在不影响原始加载的情况下尝试不同的转换和分析,因为它促进了迭代数据处理方法。
Data Transformation Snowflake

当加载原始数据时,其先前状态会得到保留,这对于审核、合规性和回溯很有好处。

查看有关 Snowflake 数据转换的最新 Reddit 讨论。

将数据转换为 Snowflakes 的过程

  • Snowflake 等云数据仓库的日益普及已导致我们对建模和记录转换的态度发生转变。
  • 使用新的 ELT 流程,提取原始源数据并将其放入 Snowflake,然后将其转换为用于分析的最终格式。
  • 将数据加载和 Snowflake 数据分开,使企业能够利用 Snowflake 低成本、可扩展的计算和存储功能,同时提高敏捷性。
  • 它无需重新加载数据,并允许您随着业务需求的变化修改查询和数据模型。
  • 数据工程师负责数据转换过程和工作负载,而数据分析师负责数据转换任务。
  • 现代组织技术,例如 Snowflake 虚拟数据仓库,使组织能够构建各种针对其需求的特定主题分析数据模型。
Data Transformation Snowflake

Snowflake 数据转换过程:将数据加载到 CDW

Snowflake 数据转换方法的第一个步骤涉及将记录移入云数据仓库 (CDW)。在现代统计信息背景下,独特的记录资源比比皆是。对分析而言增长最快的两个数据源是云服务和 SaaS 应用程序。这些源具有非常复杂的数据格式和 API。

因此,您的团队将使用的第一个数据模型由一组表组成,这些表位于云数据仓库中,包含相同的字段,分类相似,并且类似于您的数据源中的对象。然而,数据分析师可能需要帮助才能解释数据,因为其格式仍然类似于云服务对象或 SaaS 应用程序。

Data Transformation Snowflake

Snowflake 数据转换过程中有一个非常重要的阶段需要完成。应隐藏或匿名化敏感或个人信息。为了保护数据隐私和确保合规性,这一点至关重要。

Snowflake 数据转换过程:规范数据建模

规范数据建模是 Snowflake 数据转换过程的下一阶段。一旦数据进入 CDW 并完成了第一阶段的数据转换,数据工程团队就可以将原始数据转换为代表特定主题的规范数据模型。例如,这些数据模型代表客户、联系人、潜在客户、潜在客户、活动等。

规范数据模型的主要目标是创建可重用的、共享的组件,这些组件可以在各种环境中应用。这为您带来了额外的好处:为每个主题及其内部的每个字段创建一个单一事实来源,以及标准化和共享与每个主题相关的数据的定义和文档。数据模型及其构建过程的透明度对于培养分析社区的信任至关重要。

Data Transformation Snowflake

数据工程团队将从各种业务和分析团队收集需求,以构建规范数据模型。这些数据模型通常是最高级别消耗和重用需求的超集。当新的规范或数据源可用时,数据模型将不断变化。

由于数据源中的原始数据通常是标准化的(有时标准化程度很高,有时仅标准化很少),规范数据模型将经常合并(JOIN、UNION 等)来自多个对象的数据,以创建丰富而完整的字段集合来表示该主题。此外,某些数据丰富可能包含在规范数据模型中,以计算用于标准化应用程序的新字段,适用于各种用例。

Snowflake 数据转换过程:用例数据建模

创建专门针对分析用例的数据集是 Snowflake 数据转换过程的最后阶段。由于它最终归结为职责和技能,因此 Snowflake 中的数据分析师经常为当前数据建模执行此操作。

数据工程师更看重数据本身。他们不关注公司如何使用数据,而是关注数据存储在哪里、如何组织和格式化以及如何访问。因此,它们是首次数据建模和数据导入 Snowflake 的理想选择。

Data Transformation Snowflake

尽管他们对业务如何使用数据以及如何将其集成到分析中有更多的了解,但数据分析师需要对原始数据有更多的经验。因此,他们最适合建模和转换用例数据。

尽管拥有广泛的技术技能,但数据分析师通常更喜欢专注于分析,而不是编码或数据转换。在这里,分析师可以通过低代码或无代码数据转换用户界面创建不那么复杂的 SQL 代码或类似 Python 的程序。

用例数据的建模和 Snowflake 数据转换通常包括:

  • 针对特定用例进行特定的数据清理,包括查找和修复异常值或去重记录。
  • 数据缩减和塑形示例包括分组和组织数据、删除不必要的字段以及将数据的使用限制在特定时间段或维度。
  • 数据丰富可以采取的形式是添加与分析相关的新计算字段,或上传特定于用例的本地文件,例如部门或外部特定的数据。

转换 Snowflake 数据的方法

让我们研究一下 Snowflake 数据加载期间和之后的转换技术。使用 COPY INTO 命令在加载数据时进行转换。

  • 数据格式转换:要处理 CSV、JSON 或 Avro 等格式,可以通过定义字段分隔符、分隔符字符和转义选项来构建外部文件中的数据格式。
  • 列映射和排序:如果列名或顺序不同,您可以使用 COLUMN_MAPPING 选项将外部文件的列映射到目标表。
  • 表达式转换:在加载期间,应用表达式来更改数据。这可能包括更改值,然后将其加载到表中,执行计算或转换数据类型。
  • 列截断:TRUNCATECOLUMNS 选项会截断比目标表最大长度更大的列中的数据。
  • 行过滤:在加载过程中,使用 WHERE 子句根据条件过滤行。

Snowflake 的加载后转换

1. 使用 SQL

打开一个新的 Snowflake 工作表并遵循这个简单的示例,开始使用 Snowflake 的 SQL 功能来操作您的数据。

order_date 必须格式化以便于理解,并且必须从 JSON product_info 字段中提取数据。

2. 使用 DBT 与 SQL

使用数据构建工具 (dbt) 将是简化数据翻译和建模过程的更有效的方法。此工具可以帮助您集中统计转换逻辑,自动创建视图和物化表,并集成版本控制以进行协作。

借助 dbt,代码公司得以发展,可维护性得以提高,持续集成和部署 (CI/CD) 得以简化,尝试新方法也变得更加容易。

DBT 代码使用的格式是结构化的,可能看起来像这样:

3. 使用 Javascript

尽管 dbt 在数据转换过程中非常有效,但有时 JavaScript 存储过程会更合适。

例如,JavaScript 存储过程可以是一种更快捷的方式来完成一次性操作,例如根据分隔符拆分列。

4. 使用 Python

虽然 Snowpark 的速度有时可能优于 Snowflake SQL,但当复杂的更改需要使用更复杂的编程语言时,它提供了一个强大的替代方案。

将纬度和经度坐标转换为纽约市的区域名称,是使用 Snowpark 和 Python 进行数据转换的一个有力用例。

优化 Snowflake 数据转换

当涉及到 Snowflake 数据转换优化时,会考虑三个变量:

充分利用虚拟数据仓库。

您在执行数据转换查询时遵循什么过程?

利用各种数据转换方法。

数据转换执行

在 Snowflake 中,您的数据转换查询的执行方式对数据转换有很大影响。您可以选择“在查询时”运行数据转换视图,也可以将其物化。

物化视图是另一种提高查询速度的方法,适用于具有大量相似查询的工作负载。开发能够支持标准、重复查询模式的数据集是创建 Snowflake 数据转换模型的主要目标。

Data Transformation Snowflake

使用物化视图是 Snowflake 提供的一种通常推荐的方法,用于提高重复和频繁查询的查询效率。计算始终比存储成本更高。使用物化视图可能会导致存储成本略有增加;但是,在计算成本和查询响应时间方面的节省会超过存储成本。因此,如果您希望您的模型支持重复的查询模式,请物化它们。

例如,用例数据库可能包含 Snowflake 数据转换视图。当视图特定于用例且视图具有特定的工作负载或计算需求时,此解决方案效果很好。将所有 Snowflake 数据转换视图存储在单个数据库中是另一种选择。当您拥有跨多个用例共享且具有相似工作负载特征的 Snowflake 数据转换视图时,此方法效果很好。

数据转换技术

您可以采用多种技术来增强您的 Snowflake 数据转换视图和查询。这些技术将在某种程度上影响性能。有四个要点可以总结它们:

  • 只要有可能,保持简单。如果可能,将多个请求合并为一个。简单是最好的。
  • JOIN 应该发生。在云数据仓库中,连接操作相对昂贵。制作一个连接了多个表的物化数据转换视图。
  • 删除任何您不需要的信息。通过在 Snowflake 数据转换模型中使用投影来删除不必要的字段,可以减少查询时间成本。
  • 最好采用预先聚合。如果某些聚合值和维度经常使用,请创建物化聚合视图。

哪种方法最适合您?

您在 Snowflake 中转换数据的方式完全取决于您和您的预算;没有正确或错误的方法。

加载后修改提供了复杂的查询功能,但加载期间的修改减少了数据量。您决定哪种策略最适合您。

但是,重要的是要记住,数据转换可能非常耗时且资源密集,尤其是在处理大型数据集或复杂转换时。Hevo Data,一个先进的数据集成平台,在这种情况下可能具有革命性。

  • 数据加载概述
    本教程概述了将数据加载到 Snowflake 的主要选项。
  • 支持的文件位置
    “Snowflake”一词描述了云存储中存储数据文件的阶段。COPY INTO 命令支持由您的业务实体管理的云存储账户(即外部阶段)和您 Snowflake 账户内的云存储(即内部阶段),该命令用于批量和连续数据加载(即 Snowpipe)。
  • 外部阶段
    本教程概述了将数据加载到 Snowflake 的主要选项。
  • Amazon S3
  • Google Cloud Storage
  • Microsoft Cloud

存储在需要恢复才能访问的归档云存储类型中的数据是不可访问的。这些归档存储类别的示例是 Microsoft Azure Archive Storage 和 Amazon S3 Glacier Flexible Retrieval 或 Glacier Deep Archive 存储类别。

使用云存储提供商提供的工具,将文件上传(即暂存)到您的账户。

在架构中创建的数据库对象称为外部阶段。该对象包含便利设置,例如暂存文件格式、云存储中文件的 URL 以及访问账户所需的凭据。使用 CREATE STAGE 命令创建阶段。

注意:当从位于与您的 Snowflake 账户不同区域或不同云平台中的云存储提供商存储的文件导入数据时,可能会产生一些数据传输费用。有关更多详细信息,请参阅理解数据传输成本。

内部阶段

在您的账户中,Snowflake 会跟踪以下阶段类型:

  • 用户:每个用户都有一个用户阶段可供存储文件。这种类型的阶段存储可以导入多个表但由单个用户暂存和处理的文件。无法修改或删除用户阶段。
  • 表:每个在 Snowflake 中创建的表都有一个可访问的表阶段。这种类型的阶段旨在存储由一个或多个用户暂存和处理但仅加载到一个表中的文件。表阶段不能被删除或修改。
  • 命名:在架构中创建的数据库对象称为内部阶段。这种类型的阶段可以存储由一个或多个用户暂存、监督并加载到一个或多个表中的文件。命名阶段是数据库对象。

因此,可以使用安全访问控制特权来限制谁可以创建、编辑、使用或删除它们。使用 CREATE STAGE 命令创建阶段。使用 PUT 命令,将文件从您的本地文件系统上传到任何内部阶段类型。

连续加载与批量加载

以下是 Snowflake 的主要数据加载选项。需要加载的数据量和频率可能决定了最佳解决方案。

  • 使用 COPY 命令进行批量加载
    此选项允许您将数据文件复制(暂存)从本地系统到内部(Snowflake)云存储位置,或加载已经存储在云存储中的文件中的数据批次,然后再使用 COPY 命令将数据加载到表中。
  • 计算资源
    COPY 语句指定用户必须为批量加载提供才能正常工作的虚拟仓库。用户必须充分调整仓库大小以处理预期负载。
  • 加载期间的简单转换
    Snowflake 允许您使用 COPY 命令在将数据加载到表时对其进行转换。
  • 加载期间的简单转换
    在管道规范中的 COPY 语句支持的 COPY 转换选项与用于批量加载数据的选项相同。此外,数据管道可以使用 Snowpipe 将数据微批次连续加载到暂存表中,以便使用自动化任务和变更数据捕获 (CDC) 相关信息进行优化和转换。
  • 复杂转换的数据管道
    使用数据管道,加载的数据可以进行复杂的更改。

通常,此过程将“原始”数据从 Snowpipe 加载到暂存表中,进行转换,并使用多个表流和活动优化新数据以进行分析。

使用 Snowpipe Streaming 进行连续加载

当使用 Snowpipe Streaming API 直接向 Snowflake 表写入数据行时,无需暂存文件。这种架构是管理近实时数据流的有效工具,因为它降低了加载延迟和加载任何数量数据的相关成本。

对于 Snowflake Connector for Kafka,Snowpipe Streaming 也可用,提供了简单的升级路径,以受益于更低的延迟和更低的成本负担。列定义从暂存的半结构化数据文件中进行模式检测。

Data Transformation Snowflake

半结构化数据可能包含数千个列。Snowflake 提供了管理这些数据的健壮解决方案。数据可以加载到 VARIANT 类型的单个列中,利用外部表直接在云存储中引用,或者转换为并加载到标准关系表中的不同列。要使用这些选项中的任何一个,您必须对数据的列定义有所了解。

另一种方法包括收集列定义,并自动识别暂存的半结构化数据文件集合中的模式。列定义指定列的名称、数据类型和文件顺序。提供可用于创建外部表、标准表或视图的格式的语法。

  • INFER_SCHEMA
    它查找一组暂存数据文件中列的定义,并以可用于创建 Snowflake 对象的格式获取元数据。
  • 加载数据的替代方法
    在不将数据加载到 Snowflake 表的情况下,查询存储在云存储中的数据。
  • 外部表(数据湖)
    外部表允许在不先将其导入 Snowflake 的情况下查询和分析存储在外部云存储中的现有数据。外部云存储继续作为数据的真相来源。使用物化视图在 Snowflake 中物化只读数据集。

在外部云存储中保存了大量数据的账户,但希望查询其中的一部分(例如,最新数据)的账户将发现此选项特别有用。为了提高查询效率,用户可以设计这些数据的子集上的物化视图。

数据转换

  • 数据转换是将信息从一种格式更改为另一种格式的过程,通常是为了满足最终平台的.需求。
  • 企业正从许多不相关的来源收集数据,因此需要转换统计信息以确保互操作性。
  • 为了在转换后的数据可用后保护您的数据,您必须遵守数据仓库的最佳实践。
  • 理解过程和潜在目标对于最全面地理解数据转换至关重要。

概述

数据转换过程的主要目标是使数据兼容。没有它,数据科学家在新构建的数据仓库中就有合规性风险。

各种数据类型给试图处理更多数据的企业带来了问题。结构化和半结构化数据在同一数据平台上组合和查询方面历来都存在挑战。

  • 2021 Snowflake Snowday
    为了有效的事实转换,大多数人使用提取、转换和加载 (ETL) 版本。然而,像 Snowflake 这样的信息仓库技术可以以类似于关系(或结构化)统计数据的方式,原生支持半结构化数据。
  • 后勤
    数据提取、清理和交付阶段以及数据发现和规划阶段构成过程的两个阶段。
    虽然第二部分涉及传输数据,但第一部分主要侧重于准备和研究。
  • 数据转换的目的
    当迁移数据或同时分析不同类型的数据时,可能需要进行数据转换。当用户希望合并来自多个数据集的数据以及将新信息引入预先存在的数据集时,也会发生这种情况。兼容性贯穿所有这些情况。
  • Snowflake 和数据转换
    使用 Snowflake,部门、地点或合作伙伴可以安全地共享数据,而无需执行数据提取或转换。

Snowflake 为用户提供了通过各种数据集成合作伙伴集成主要数据源的选项,并在加载后执行 ETL 或转换数据 (ELT)。使用 Snowflake,您可以专注于结果,而不是担心数据集成。

结论

总而言之,我们可以得出结论,Snowflake 提供了一个强大而灵活的数据转换框架,能够有效地分析和操作数据以满足各种分析目标。用户可以通过利用 Snowflake 脚本、流和任务、与各种 ETL 工具的交互以及数据管道功能,轻松构建简单和复杂的转换。最佳实践确保转换能够正确有效地执行。这些措施包括利用视图、优化 SQL、利用 CTE 和关注性能。由于其广泛的功能集,Snowflake 是现代数据转换项目的绝佳选择。它提供了将原始数据转化为有见地的知识所需的所有工具。