前言:
现时姐妹们对“dw实时视图不能刷新”可能比较关心,小伙伴们都想要学习一些“dw实时视图不能刷新”的相关内容。那么小编也在网络上搜集了一些对于“dw实时视图不能刷新””的相关资讯,希望同学们能喜欢,朋友们快快来学习一下吧!如果您对Snowflake 感兴趣,那么您可能知道该产品现在是一个热门话题。 Snowflake Inc. 公司于 2020 年 9 月首次公开募股,这是有史以来最大的软件 IPO。甚至投资大师沃伦巴菲特也投资了Snowflake(他购买了自 1956 年福特以来的首次 IPO)。但是,本文不是关于投资,而是关于技术,因为 Snowflake 确实是一个很棒的分析平台,可以让您实现现代集成数据的应用程序。
在过去的几年中,我们公司实施了许多有趣的解决方案,其中我们利用 Snowflake 来解决客户的各种业务问题。在其中一个项目中,我们实现了一个实时分析用例,我将在本文中对其进行描述。
业务需求
我们的客户决定为其行业中的客户开发下一代分析平台,该平台结合并简化了数据集,让这些客户能够在对内容和服务做出明智决策的同时展示影响力。分析平台内的功能包括自助数据发现、可定制的仪表板、广泛的数据源和实时数据连接。
架构
并非我们需要集成的所有源系统都提供实时提取所有必要数据的机制。因此,我们必须设计一个解决方案,允许我们结合批处理和流数据管道。 Snowflake 和 Tableau 是分析平台的核心技术,必须辅以其他工具来满足所有功能性和非功能性需求。还需要注意的是,该平台必须托管在 Amazon Web Services (AWS) 云中。因此,我们的团队提出了以下解决方案,类似于 Lambda 架构。
在高层次上,该架构由以下三层组成:
BATCH LAYER 每天利用源系统 API 提取和处理数据。它旨在通过能够处理所有新数据来实现完美的准确性和数据质量。这意味着它可以修复错误,与其他源系统协调数据,并根据完整的数据集运行数据质量检查。输出存储在 Core DWH 和数据集市层的 Snowflake 中,并替换前一天的在线数据(由速度层生成)。
SPEED LAYER 近乎实时地处理来自源系统的数据流,并且不要求完整性和高数据质量。该层旨在通过提供最新数据的实时视图来最小化延迟。从本质上讲,速度层负责填补批处理层在提供基于最新数据的视图方面的滞后所导致的“差距”(当天的数据)。该层的视图可能不如批处理层最终生成的视图准确或完整,但它们几乎在接收到数据后立即可用,并且在批处理层对相同数据的视图可用时定期替换。
SERVING LAYER 通过 Snowflake DB 视图组合来自批处理和速度层的数据,并响应来自 Tableau 的最终用户的即席查询。
实施细则
接下来,我将深入探讨端到端数据管道是如何实现的细节。
以下是分步数据工作流程:
数据摄取。第一步,使用源系统 API 将数据从源系统摄取到数据湖 (AWS S3) 中。 Python 脚本是使用 Apache Airflow 触发的,它是整个批处理管道的编排工具。 Amazon Elastic Kubernetes Service (EKS) 用于运行 Airflow 工作负载。
降落到Snowflake。来自 Data Lake 的原始(按原样)数据被复制到 Snowflake Landing 区域。为此,Apache Airflow 会触发在 Snowflake 虚拟仓库上执行的 Snowflake 复制命令。
转换为 Core DWH 层。来自 Snowflake Landing 区域的原始数据被转换到 Core DWH 层,我们在其中拥有规范域数据模型(此处利用了 Data Vault 建模)。 Apache Airflow 触发在雪花虚拟仓库上执行的 SQL 脚本来处理数据。
转换为数据集市层。来自 Core DWH 层的数据根据特定的业务需求转化为数据集市(维度建模)。根据转换的复杂性,这里有两个选项。使用 Snowflake DB 视图的虚拟数据集市 — 使用此选项,数据不会以物理方式存储。持久雪花表——Apache Airflow 触发在雪花虚拟仓库上执行的 SQL 脚本,脚本计算复杂的业务规则并将信息写入数据集市表。
近实时数据管道(速度层)
作为速度层的一部分,数据经过以下步骤:
源系统的异步事件服务充当过滤器,以 JSON 消息的形式捕获来自源系统的流量。然后将消息路由到 Amazon MSK(托管 Kafka)主题。
StreamSets Data Collector (SDC) 工具用于消费来自 Kafka 主题的事件并对其进行处理:过滤所需的 JSON 消息;使用源系统 API 动态丰富数据(例如,通过传递其 ID 获取实体名称);对数据应用其他所需的转换(数据屏蔽、过滤等);将数据转换为CSV文件格式,并将文件放入Data Lake S3文件夹——图表上的在线数据(当前日期);同时,过滤后的原始 JSON 消息被放入 Data Lake S3 文件夹 — Online Raw Data Archive。
创建了一个 Snowflake 外部表(图中的实时视图),允许我们直接从 Data Lake S3 存储桶查询信息。因此,数据不会存储在数据库中,而只会在从 Tableau 服务器查询时通过 Snowflake 虚拟仓库。
服务层
服务层实现为一组 Snowflake DB 视图,这些视图结合了(联合 SQL 运算符)来自数据集市(在批处理数据流中准备)和来自 Snowflake 外部表(图中的实时视图)的信息。因此,实际数据已准备好通过自定义仪表板和自助数据发现功能从 Tableau 服务器中使用。使用实时连接模式,Tableau 服务器直接对 Snowflake DB 进行查询。
使用 Snowflake 实施近实时分析的替代选项
如果您有使用 Snowflake 的经验,那么您可能想知道为什么我们没有使用 Snowpipe 来实现连续数据加载到数据库中。实际上,Snowpipe 可以在文件在阶段中可用时以微批次的形式从文件中加载数据,并在几分钟内将其提供给用户。但在我们的案例中,我们要求在几秒钟内向用户提供数据。支持外部表的另一个论点是将数据连续加载到 Snowflake 的成本。借助 Snowpipe 的无服务器计算模型,Snowflake 管理负载容量,确保最佳计算资源满足需求,但您必须为此付费。对于外部表,我们不会将数据加载到 Snowflake(它存储在 S3 存储桶中),因此我们不需要为数据加载付费。然而,同样重要的是要记住,当带有新事件的文件被添加到 S3 时,必须刷新外部表。
结论
如今,越来越多的组织正在努力实现数据驱动。因此,业务用户的需求变得更加复杂,例如,他们不再希望等待数天来分析操作系统中的事件,而是希望根据近乎实时收到的信息主动采取行动。因此,这导致需要引入新的数据平台功能。 Snowflake 是新一代分析平台,可让您有效实施各种复杂的用例,您从本文中了解到其中一个。
标签: #dw实时视图不能刷新 #dw2020实时视图