查询 MongoDB--SPL 轻量级多源混算实践 4

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: SPL 支持多种数据源连接,包括 MongoDB 等 NoSQL 数据库。通过外部库形式提供驱动,灵活扩展,可实现实时数据计算与混合分析。

除了以上常见数据源,还有 NoSQL、MQ 等数据源,其中以 MongoDB 最为常用。我们用 SPL 连接 MongoDB 做计算。

导入 MongoDB 数据。

外部库
SPL 支持的多种数据源大概分两类,一类是像 RDB 有 JDBC 直接使用,或者文件等直接读取;另一类是像 MongoDB 等非关系数据源是在官方驱动上进行了简单封装,具体以“外部库”的形式提供。

外部库列表包括以下数十种非常规数据源及函数:

7b675fdf1fdc458d2af36a0a5edd9d5d_1748232118017100.png
外部连接器放在外部库中,外部库是 SPL 提供的外部函数扩展库,将一些在普遍场景使用频率不高的专门用途函数以外部库形式提交,这样可以根据需要临时加载。

外部数据源种类繁多,也不是每种数据源都很常用,所以将这些连接器以外部库的形式提供会更为灵活,以后发现有新的数据源也可以及时补充而不影响现有的数据源。

具体使用时,需要先下载外部库驱动:https://download.raqsoft.com.cn/esproc/ext/extlib/extlib-20250508.zip

然后放置到任意目录,比如 [安装目录] \esProc\extlib。接着在 IDE 中加载外部库目录,并勾选要用到的外部库。
050775385dc4aea129c66703e08b84c3_1748232118102100.png
5bfb3b5e69985ff917769ecdecb4eb5d_1748232118192100.png
计算用例
Orders 集合存储了订单相关信息,其结构和内容如下:

{
   
  "_id": {
   
    "$oid": "6826ade0cbc0428d8335b0bb"
  },
  "order_id": "ORD1001",
  "customer": "C001",
  "order_date": {
   
    "$date": "2025-01-15T00:00:00.000Z"
  },
  "order_details": [
    {
   
      "product_id": "P001",
      "product_name": "Laptop",
      "quantity": 1,
      "price": 899.99
    },
    {
   
      "product_id": "P005",
      "product_name": "Wireless Mouse",
      "quantity": 2,
      "price": 19.99
    }
  ]
}

现在要查询:orders 集合中订单金额前 3 的客户

SPL 脚本:
image.png
A1:连接 MongoDB

A2:查询 orders 数据,@d 表示返回成序表。

bb72e8e0076d69210733f180c4c7c456_1748232118273100.png
这是一个多层结构,其中一个 order_details 展开,与之前处理的 JSON 结构是类似的。
5367b67135d2d70eb97f13c92c87f8e7_1748232118409100.png
A2 执行的命令完全是 MongoDB 的原生语法,我们在 MongoShell 中执行看:
9032662b72053b12331cfc9674928d91_1748232118531100.png
成功返回了游标。取出 1 条看看:
8c593077770b9602852d09af22e207d2_1748232118639100.png
A3:按客户分组汇总订单金额,后续的计算就都一样了。

A4:使用 top 函数取前 3 大客户

我们再做个过滤,查询 2025-02-01 之前的订单。

A2 改成:

=mongo_shell@d(A1,"{'find':'orders',filter: {order_date: { $lt: new ISODate('2025-02-01T00:00:00Z') } }}")

运行结果:
4919136e0f58bb18479110b9faa1b68a_1748232118733100.png
在 MongoDB 中执行同样的命令,可以得到相同的结果。
b84d14830e6e1ffe3f8dbd7444c3a0a6_1748232118872100.png
这里以 MongoDB 来举例说明 SPL 连接特殊数据源时的处理方式。其他数据源也是类似配置外部库,然后使用对应的原生语法访问即可。

比如读取 Kafka 数据:
image.png
访问 Elasticsearch:
image.png
访问 HDFS:
image.png
SPL 这种 Native 接口 + 简单封装的方式简单方便,可以保留数据源的特点,充分利用其存储和计算能力,不需要先把数据做“某种”入库动作,实时访问就可以;用户想要扩展也不难。但读数是写在 SPL 脚本里的,而且使用了原生接口,这就意味着如果数据源变化时还要修改脚本,没法做到像逻辑数仓那样对底层数据源完全透明。

逻辑数仓的数据源接入依赖的专用连接器,可以做到完全对底层透明。但连接器要针对每种数据源单独开发,复杂度很高,导致可用 Connector 数量明显不多,用户自行基于开源代码再开发的难度也很大,往往要等厂商支持。

逻辑数仓专用 Connector 和 SPL 使用 Native 接口简单封装没有好坏之分,前者可以做更深层次的支持和优化,可以做到一定程度的透明化;后者则更加灵活,支持的数据源丰富且扩展灵活,要根据具体需要选择。

至此我们已经学会了用 SPL 查询数据库、CSV/XLS、Restful/JSON、MongoDB,这些数据接入后都可以进行混合计算了。

相关文章
|
8月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
144 0
|
存储 NoSQL MongoDB
掌握MongoDB索引优化策略:提升查询效率的关键
在数据库性能调优中,索引是提升查询效率的利器。本文将带你深入了解MongoDB索引的内部工作原理,探讨索引对查询性能的影响,并通过实际案例指导如何针对不同的查询模式建立有效的索引。不仅将涵盖单一字段索引,还会探讨复合索引的使用,以及如何通过分析查询模式和执行计划来优化索引,最终实现查询性能的最大化。
|
10月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
405 17
|
11月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
435 9
|
NoSQL 定位技术 MongoDB
解锁MongoDB索引的秘密:优化查询效率与应对限制的策略
解锁MongoDB索引的秘密:优化查询效率与应对限制的策略
277 0
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
113 1
|
NoSQL MongoDB 索引
MongoDB 覆盖索引查询
10月更文挑战第21天
122 1
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
422 1
|
人工智能 NoSQL 机器人
MongoDB Atlas与YoMio.AI近乎完美适配:推理更快速、查询更灵活、场景更丰富
随着MongoDB的新发布和革新,YoMio.AI的“闪电式发展”值得期待。
|
JSON NoSQL MongoDB
MongoDB Schema设计实战指南:优化数据结构,提升查询性能与数据一致性
【8月更文挑战第24天】MongoDB是一款领先的NoSQL数据库,其灵活的文档模型突破了传统关系型数据库的限制。它允许自定义数据结构,适应多样化的数据需求。设计MongoDB的Schema时需考虑数据访问模式、一致性需求及性能因素。设计原则强调简洁性、查询优化与合理使用索引。例如,在构建博客系统时,可以通过精心设计文章和用户的集合结构来提高查询效率并确保数据一致性。正确设计能够充分发挥MongoDB的优势,实现高效的数据管理。
418 3

推荐镜像

更多