首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kedro与MongoDB和其他文档数据库?

问Kedro与MongoDB和其他文档数据库?
EN

Stack Overflow用户
提问于 2019-11-20 02:12:29
回答 1查看 270关注 0票数 3

在MongoDB或其他文档数据库中使用kedro的最佳实践是什么?例如,MongoDB没有类似于SQL的查询语言。Python中的大多数Mongo“查询”(使用PyMongo)将如下所示:

代码语言:javascript
复制
from pymongo import MongoClient
client = MongoClient(...)  // Credentials go here

posts = client.test_database.posts

posts.find_one({"author": "Mike"})

然后你会得到像这样的东西:

代码语言:javascript
复制
{u'_id': ObjectId('...'),
 u'author': u'Mike',
 u'date': datetime.datetime(...),
 u'tags': [u'mongodb', u'python', u'pymongo'],
 u'text': u'My first blog post!'}

现在我的问题是:逻辑应该在哪里找到这篇文章,然后将其解析为数据帧?尝试创建一个MongoQueryDataSet类似乎并不合适,因为如果您想要支持插入、聚合等,最终将不得不用笨重的PyMongo参数包装整个yaml。

MongoDataSet类应该只返回一个MongoClient对象并捕获kedro节点中的任何进一步的逻辑吗?

通常,当您使用具有这些函数式(非SQL)API但没有简单查询字符串的数据库时,数据加载逻辑应该位于何处?

EN

回答 1

Stack Overflow用户

发布于 2019-11-21 01:05:08

逻辑应该在哪里找到这篇文章,然后将其解析成数据帧?

国际海事组织,MongoDataSet并不是一个坏主意。Kedro已经为各种来源提供了相当多的contrib datasets包装IO逻辑,所以对我来说,MongoDataSet非常适合这个逻辑。

如果你想支持像插入、聚合之类的东西,你最终不得不用笨重的

参数来包装整个yaml PyMongo。

我想说的是,立即创建整个pymongo的完整包装器并不是一个很强的要求。即使您的dataset只能在加载时执行find(),在保存时执行insert_many(),这已经是一个很好的开始。

MongoDataSet类应该只返回一个MongoClient对象并捕获kedro节点中的任何进一步的逻辑吗?

Kedro的节点philosophy是纯Python函数,这种方法对我来说非常不同,因为节点对如何处理数据加载和保存有太多的“控制”。此外,它破坏了数据集之间的互换性-如果您(或其他人)决定在未来放弃MongoDataSet,并将其交换为您项目中的其他东西(例如,JSONLocalDataSet或JSONBlobDataSet),它将仅适用于“纯”节点,但不适用于MongoClient -您还必须更改节点逻辑-这是Kedro建议避免的。

作为另一种不意味着创建新数据集的选择,您还可以考虑使用kedro.io.LambdaDataSet -您需要提供自己的钩子来保存和加载。但是,请注意,LambdaDataSet不能在catalog.yml中定义,必须在Python端“手动”添加到DataCatalog中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58940390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档