基于presto分布式查询mongodb的使用中遇到的问题

来源:互联网 发布:unity3d塔防游戏案例 编辑:程序博客网 时间:2024/06/06 07:43

由于项目中需要大数据量的相互比对得出比对结果,所以采用了facebook的presto。一个基于Java开发的大数据分布式 SQL 查询引擎。

presto的部署以及使用官网上有较为详细的说明。这里附上官网网址:https://prestodb.io/

之后可能会详细的说一下mongodb的部署以及使用时注意的问题,不过这篇主要是讲在使用中遇到的一个很大的问题,以及解决方式。


在实际开发中,需要获取表的数据结构,由于mongodb是nosql,实际上并没有表结构的概念,但是presto可以通过sql语句“show column from collectionName”,这句sql查询出这个集合的“表结构”。但是有个问题出现了,就是我实际插入的一条数据(也就是文档),有二十个字段,但是查询出的表结构字段只有十几个。而且在查询数据的时候,也是只显示那十几个字段的数据。后来发现了一个规律,未显示的字段都是在第一条数据中是null的字段。为了进一步确认猜测是否正确,又去查看了一下源码。发现源码中有这样一段


圈出的代码写的就是presto底层读取mongo表中第一条数据,由此可以断定,presto获取表结构是根据第一条数据的结构。接下来往下看


这段代码圈出来的部分是做了一个判断,具体isParent()这个方法并没有去深入研究,但是在测试过程中,获取到的空字段验证都是false,也就是说没有通过这个验证进入里面的方法,意味着并没有加入到metedata这个文档对象中,所以在查询的结构中就没有出现null的字段,造成字段缺失的问题。


解决方式:可以在插数据到mongo的时候,在正常数据进去之前,插入一条全字段的数据,值可以为空字符串,然后再导入正常的数据即可。

默认的排序是根据插入的时间。也就是说,最先插入的数据就是第一条数据。这样的话在查询表结构的时候就能获取到全部的字段。


文章中可能有些细节的地方写的不是很清楚,以后会继续补充,欢迎大家提意见纠错。

原创粉丝点击