问题
我认为这是一个很常见的问题,希望有我们可以重用的解决方案/方法。
我们正在 Azure ADLS gen2 中构建数据湖,具有单向数据流:Nifi/ADF -> ADLS -> ETL/Spark/Databricks -> 数据仓库 -> Power BI
。一些 ETL 输入应由负责任的业务用户每周/每月加载/更新。
您能否建议/改进业务用户上传 ETL 输入的解决方案,并满足以下要求?
要求
- 用户友好的界面。
- 解析/验证。我们必须确保数据在上传时符合预期的格式。
- 审核日志记录。我们必须有能力跟踪谁以及何时装载了什么。如果出现延迟,应发送通知。
- 实现简单且符合当前架构。
需求成就的估计范围为 1(非常糟糕的实践方法)到 5(100% 干净、易于实现的解决方案)。
可能的解决方案
Upload files from Power Apps to Data Warehouse.
流程:业务用户 -> Power Apps -> 数据仓库和存储过程 -> ADLS -> Spark -> 数据仓库 -> Power BI
。- 1 个要求 = 5。使用 Power Apps 构建的用户友好界面。
- 2 要求 = 2. SQL 存储过程中验证/转换的实现不佳。所有其他应用程序代码都是用 Spark 编写的。
- 3 要求 = 3-5。还不知道如何实现这一点。
- 第 4 个要求 = 2。数据流变为双向,即
DW -> ADLS -> DW
。更难推理和协调。
使用 Spark/Databricks 而不是 ADLS 事件/触发器。
流程:业务用户 -> Microsoft Storage Explorer 应用 -> ADLS gen2 -> Azure Blob 存储触发器 -> Azure Function -> Spark 解析/验证作业 -> ADLS gen2
- 第一个要求 = 3-4。通过存储资源管理器上传非常用户友好,唯一的问题是通知用户成功/失败的机制可以通过电子邮件完成,并且可能不是很清楚。
- 第二个要求 = 5。我喜欢在 ETL 端进行解析/验证,而不是在数据仓库存储过程上。
- 第三个要求 = 1-3。目前尚不清楚实现这一目标的热门程度。预计它会比使用 Power Apps 更糟糕。
- 第四个要求 = 4. 单向过程,数据不会从 DW 移动到数据湖。 4 而不是 5,因为业务用户不太清楚成功/失败通知将通过电子邮件发送。实现的复杂性也稍大一些。
最佳答案
场景
据我了解,您正在寻找具有以下功能的单向 ETL 流程/架构(按优先级排序):
- 用户友好
- 验证输入数据
- 使用 SQL 存储过程解析输入数据
- 使用 Azure Data Lake Storage (ADLS) 即可轻松实现
- 通过记录谁上传了什么内容以及何时上传到数据湖,至少提供基本的审核功能
用户友好的定义也有点模糊,因为用户最终会习惯使用不直观的工具 - 例如,您可以强制他们参加类(class)。我知道有些商业用户对使用例如Power BI,但他们没有任何选择不使用它。
建议
我的总体经验是,根据业务需求量身定制的定制前端会比让用户使用一把巨大的一体化瑞士军刀(用户日常只使用其中的几个功能)更满意商业。我从未见过 PowerApps 被使用,但我从他们的网站和 https://alternativeto.net/software/microsoft-powerapps/ 得到的信息这是某种低代码应用程序/UI 构建平台。
我个人会选择拥有大量用户社区的低代码工具,例如Tableau、Qlik 或 Appian。我与它们中的任何一个都没有关联,但我设法相当快地将它们全部连接到 SQL 数据库,这就是我提到这三个数据库的原因。
你说
The Storage Explorer has enough user friendly interface, and has zero cost to implement. The only concern is about validation-feedback and audit. In order to mitigate validation - we may create some king of Excel templates for business users.
所以我猜你可能会选择这个解决方案,但我永远不会牺牲审计。与备份类似,人们通常只有在发生意外时才知道没有备份或审计的真正成本是什么。如果发生网络攻击,或 white collar crimes ,企业通常非常需要日志文件。
关于azure - 业务用户上传 Data Lake ETL 输入的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61340510/