原文:
www.kdnuggets.com/2023/07/build-streaming-semistructured-analytics-platform-snowflake.html
编辑者图片
1. Google 网络安全证书 - 快速进入网络安全职业。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织 IT
Snowflake 是一种 SaaS,即软件即服务,特别适合对大量数据进行分析。该平台极其易于使用,非常适合业务用户、分析团队等从不断增长的数据集中获得价值。本文将深入探讨在 Snowflake 上为医疗数据创建流式半结构化分析平台的组件。我们还将讨论此阶段的一些关键考虑因素。
医疗行业支持多种不同的数据格式,但我们将考虑最新的半结构化格式,即 FHIR(快速医疗互操作资源)来构建我们的分析平台。这种格式通常将所有以患者为中心的信息嵌入到一个 JSON 文档中。该格式包含大量信息,如所有医院接触、实验室结果等。当分析团队拥有一个可查询的数据湖时,可以提取有价值的信息,例如有多少患者被诊断为癌症等。假设所有这些 JSON 文件每 15 分钟通过不同的 AWS 服务或端 API 端点推送到 AWS S3(或其他公共云存储)。
-
AWS S3 到 Snowflake RAW 区域:
-
数据需要不断地从 AWS S3 流式传输到 Snowflake 的 RAW 区域。
-
Snowflake 提供 Snowpipe 管理服务,可以以连续流式方式读取 S3 中的 JSON 文件。
-
在 Snowflake RAW 区域中需要创建一个具有变体列的表,以保存原生格式的 JSON 数据。
-
Snowflake RAW 区域到流:
-
Streams 是一种管理更改数据捕获服务,能够捕获所有新到达的 JSON 文档到 Snowflake RAW 区域
-
Streams 应指向 Snowflake RAW Zone 表,并应设置为 append=true
-
Streams 就像任何表一样,易于查询。
-
Snowflake 任务 1:
-
Snowflake 任务类似于调度程序。查询或存储过程可以使用 cron 作业符号安排运行。
-
在此架构中,我们创建任务 1 来从 Streams 中获取数据,并将其导入临时表。此层将被截断并重新加载。
-
这样做是为了确保每 15 分钟处理一次新的 JSON 文档。
-
Snowflake 任务 2:
-
此层将原始 JSON 文档转换为分析团队可以轻松查询的报告表。
-
要将 JSON 文档转换为结构化格式,可以使用 Snowflake 的 lateral flatten 功能。
-
Lateral flatten 是一个易于使用的功能,可以展开嵌套的数组元素,并可以使用‘:’符号轻松提取。
-
推荐使用 Snowpipe 处理少量大文件。如果小文件在外部存储中未合并,成本可能会很高。
-
在生产环境中,确保创建自动化进程以监控 streams,因为一旦它们变得陈旧,数据将无法从中恢复。
-
单个 JSON 文档允许的最大大小为 16MB 压缩,能够加载到 Snowflake 中。如果您有超出这些大小限制的大型 JSON 文档,请确保在将其导入 Snowflake 之前有一个拆分的过程。
由于 JSON 文档中嵌入的元素的嵌套结构,管理半结构化数据始终具有挑战性。在设计最终报告层之前,请考虑即将到来的数据量的逐步和指数增长。本文旨在展示如何轻松构建半结构化数据的流管道。
Milind Chaudhari 是一位经验丰富的数据工程师/数据架构师,拥有十年的工作经验,使用各种传统和现代工具构建数据湖/湖仓。他对数据流架构充满热情,并且还是 Packt 和 O'Reilly 的技术审稿人。