这可能是支持数据源最多的计算技术
今天,企业的数据来源已经从原来的“就几张表”发展到数据库、文件、接口、流式数据、对象存储、NoSQL……五花八门。能不能搞定“多数据源混算”,已经成了数据计算技术的重要标准之一。
说起多源混算,“逻辑数据仓库”大概是最主流的做法了。而且听起来很美:不用提前同步数据、不用折腾传统 ETL,还能用 SQL 跨库查询。
但理想丰满,现实骨感。这些逻辑数仓,以为能连天接地,真落地用的时候,发现不过是支持几个主流关系库、几个文件格式,稍微冷门一点的数据源立马就抓瞎。想搞点跨源混算?配置半天还跑不通,最后还得靠 Python 打补丁。
esProc:真正在“多数据源支持”上做对了的技术
相比于逻辑数仓那套复杂建模的“重”思路,esProc 走的是:不用建模、不隐藏数据源的“轻”机制,明确地告诉你——每个数据源我都能连,我直接读取原始数据,然后用一套统一的脚本语言 SPL 来混合计算。
听上去朴素,但效果非常强悍。
支持的数据源真多,不是“吹”出来的
esProc 的连接能力确实覆盖极广,主流数据源基本都有原生支持,按类型来看:
关系数据库:Oracle、MySQL、SQL Server、PostgreSQL、SQLite、DB2……只要支持 JDBC 的,基本都能直接用;
非关系数据库:MongoDB、Redis 等,不走关系模型也能玩;
各种文件格式:CSV、Excel、JSON、XML、Parquet、ORC,不管结构规不规整,都能读;
消息队列和流数据:Kafka 直接对接,处理流式数据也不在话下;
大数据平台与对象存储:Hive、HDFS、S3 等;
HTTP / Web API:支持 JSON、XML 格式解析,直接从接口拉数据;
其他奇奇怪怪的:Elasticsearch、InfluxDB 等也有现成封装。
比起一些“自称支持多源”的技术,esProc 这个列表不仅长,而且用起来也顺手。
不只是能连,还能混合计算,语法还挺爽
很多技术是“能连不能算”,比如某些逻辑数仓系统,Connector 接上了,但做个跨库关联写一大堆 SQL 子查询还不一定跑得通;有的嵌入式数据库像 DuckDB,虽然也能查 CSV、Parquet,但连数据库反倒犯难,像 Oracle、SQL Server 这些企业常用库却不支持;至于 Python,库虽然多,但用法乱七八糟,每种都要单独学习,根本谈不上统一接口。
而 esProc 就清爽很多:
比如做 MySQL 和 Oracle 的跨库关联:
A | |
1 | =oracle.query("select EId,Name from employees") |
2 | =mysql.query("select SellerId, sum(Amount) subtotal from Orders group by SellerId") |
3 | =join(A1:O,SellerId; A2:E,EId) |
再比如 MongoDB 混查 MySQL,结构更复杂也能轻松搞:
A | |
1 | =connect("mysql") |
2 | =A1.query@x("SELECT o.order_id, o.user_id, o.order_date, oi.product_id, oi.quantity, oi.price FROM orders o JOIN order_items oi ON o.order_id = oi.order_id WHERE o.order_date >= CURDATE()- INTERVAL 1 MONTH") |
3 | =mongo_open("mongodb://127.0.0.1:27017/raqdb") |
4 | =mongo_shell@d(A3, "{'find':'products', 'filter': { 'category': {'$in': ['Tablets', 'Wearables', 'Audio'] } }}” ) |
5 | =A2.join@i(product_id,A4:product_id,name,brand,category,attributes) |
6 | =A5.groups(category;sum(price*quantity):amount) |
使用对应数据源的原生语法,不仅更简单,还能充分保留原有数据源的优势。
对于习惯 SQL 的用户,esProc 还贴心提供了 SQL 支持。简单情况可以直接用 SQL,复杂情况就切回 SPL,二者混用,灵活度更高。
扩展新数据源,自己动手也不难
让 esProc 真正不同的是在“扩展数据源”这件事上做得特别轻巧。
逻辑数仓要扩展新数据源,得专门开发一个 Connector,这不是简单写个配置文件那么轻松,而是要对目标数据源的访问机制、查询语言、数据格式深度理解,再嵌入逻辑数仓框架里去对接、解析、转换,复杂度极高。用户想要基于源码自己扩展几乎不可能,需要等待厂商的支持。
而 esProc 则是统一使用 Native 接口 + 简单封装的方式来做:
对于关系型数据库,直接使用 JDBC,拿来即用;
对于 MongoDB、Kafka 这类非关系数据源,也是在官方驱动基础上做了轻封装。
esProc 还提供了扩展接口机制,不需要掌握底层架构,只要知道目标数据源怎么读数据、怎么格式化,基本就能做一个“Connector”级别的功能。这就意味着:esProc 本身支持的已经够多,但如果你还想支持更奇葩的数据源,自己动手也完全没压力。
不追求“透明”,但灵活度更高
逻辑数仓讲究“透明”:你写一条 SQL,底层自动调度多个数据源。但这种“透明”代价非常大,Connector 必须非常强大,很多时候一旦数据结构稍微复杂或者不规则,系统就跪了。
esProc 走的是“明确”:每个数据源你自己接,数据你自己拿回来,然后 SPL 统一处理。虽然不那么“优雅”,但灵活得多,特别适合处理非结构化、半结构化、甚至动态结构数据,逻辑复杂也能 hold 住。
透明化有好处,但也限制扩展能力; SPL 则是把“灵活可扩展”放在第一位。
融得进主流应用系统
有些计算引擎虽然好用,但难嵌入。比如 Python 库再多,在 Java 主导的企业系统里总归是“外来户”,调用不顺。
esProc 则是纯 Java 开发,部署灵活,既可以嵌入做内存计算引擎,也可以作为微服务独立运行。该集成时能集成,该独立时能独立,对企业系统友好度极高。
多,不只是种类多,更是扩展轻、用得爽
说到底,数据源支持得多,不只是“数量多”那么简单。关键是:
esProc 原生支持种类多,覆盖全;
扩展能力强,轻封装、低门槛;
写法统一,逻辑清晰,还能混合 SQL;
适合各种结构数据,灵活高效;
跟主流系统集成顺滑,不惹麻烦。
这几条加起来,才能撑起这句话:
esProc,可能是目前支持数据源最多的计算技术。
不仅支持得多,还支持得好、扩展得快、用得舒服。
英文版