kiba-etl - 如何在 Kiba 中实现本地 DB + 外部 API 源
问题描述
我正在尝试在Rails 应用程序的上下文中在Kiba中实现以下 ETL 作业:
- 对于给定的本地数据库记录
- 使用远程应用程序 API (Evernote)搜索其名称
- 对于使用 API 找到的每条记录,获取此记录上使用的所有标签的 GUID,并将其合并到一个数组中
- 使用相同的 API,检索所用标签的完整列表,以便从 GUID 中获取标签
- 根据内部业务逻辑处理这些标签(保留、忽略、替换)
- 将这些标签保存在本地数据库记录中
我的问题是:您将如何对本示例中的源进行建模?
起点是本地数据库记录,但真正的数据来自对 API 的两次调用(1/ 搜索返回的记录和 2/ 完整标签列表)。
谢谢!
解决方案
您可以通过这种方式对其进行建模:假设您在某个变量(例如people_ids
)中获得了数据库记录的 id 列表,您可以将其作为第一次迭代:
Kiba.parse do
source Kiba::Common::Sources::Enumerable, -> { people_ids }
transform do |person_id|
Enumerator.new do |y|
# here some HTTP query for search, retrieval of tags etc, and
# you would yield each result in a loop
y << {person_id: person_id, tags: [...] }
end
end
transform Kiba::Common::Transforms::EnumerableExploder
# SNIP
end
至于标签,如果它们已经在您的数据库中并且数量很少,您可以尽早加载它们以构建某种形式的查找表:
tags = {}
Kiba.parse do
pre_process do
# here preload the tags & data required to decide on your business logic
end
# SNIP
end
这样,您可以稍后在管道中将每个传入标签与数据库中的正确标签 ID 相关联,并简单地用于ActiveRecord
插入关系。
或者,如果您想要一个已构建的快速插入/更新插入解决方案,并获得我们的供应商支持,您也可以利用Kiba Pro,因此也支持开源版本的开发!
希望这能正确回答您的问题,否则请随时发表评论!
推荐阅读
- data-analysis - 有没有办法将 Microsoft Teams 对话历史记录下载到文本文件或 Excel 中?
- sql - 所需格式的 Sql 查询输出
- c# - 如何在 Docker 中构建 .Net 核心应用程序?
- paraview - 在用户定义的 2D 网格 Paraview 中获取插值
- c++ - 如果类在 C++ 中具有 const 或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- python - 有什么方法可以从 Web Of Science 数据库中获取作者的关键词
- gwt - 为 Java 11 更新 Vaadin 项目的 GWT
- virtual-machine - Cmd+Space 快捷方式未传递给 Parallels Linux 虚拟机
- python - 更新错误“模块”对象不可调用后 pip 不再工作
- php - 如何从 PHP 启动 Powershell 脚本并添加参数