Presto连接mongodb实现数据查询
1.安装(建议docker安装)
1.1 拉取镜像
docker pull prestosql/presto
1.2 启动容器
docker run -p 8081:8081 --name presto prestosql/presto
上述端口自定义即可。如果想让其他主机连接该容器,需要打开8081端口的防火墙,命令如下:
# firewall-cmd --zone=public --add-port=8081/tcp --permanent
# firewall-cmd --reload
1.2.1 进入presto CLI
[root@docker-test ~]# exec -it presto presto
presto>
1.2.2 退出presto CLI
presto> exit
1.2.3 进入presto容器命令行
@docker-test ~]# docker exec -it presto /bin/bash
[presto@e407f59f769a /]$
1.2.4 在容器中查看presto目录
[presto@e407f59f769a /]$ cd data/presto/
[presto@e407f59f769a presto]$ ls
etc plugin var
1.2.4 查看presto配置文件、源插件
从下图可以看到支持mongodb.
1.3 增加mongodb配置
presto@e407f59f769a presto]$ cd /data/presto/etc/catalog/
[presto@e407f59f769a catalog]$ touch mongodb.properties
[presto@e407f59f769a catalog]$ vi mongodb.properties
mongodb.properties的内容是:
connector.name=mongodb
mongodb.seeds=192.168.100.44:27017
1.4 修改 /etc/config.properties
将上图中的端口号改为启动容器时候的端口号(8081),这里默认是8080。如果创建容器的时候没有变更端口号,使用默认的8080,则这里不用修改。
2.JAVA调用
github地址:git@github.com:xgxizz/PrestoMongoDemo.git
3.踩坑与解决
mongodb数据库表名字段大写会导致查询报错,报错信息如下:
java.sql.SQLException: Query failed (#20201119_075738_00045_4krwx): line 1:8: SELECT * not allowed from relation that has no columns
....
....
Caused by: io.prestosql.spi.PrestoException: line 1:8: SELECT * not allowed from relation that has no columns
解决办法:
解决办法来源:stackoverflow,详见参考链接。
默认情况下如果presto连接mongodb成功后会默认创建_schema,如图所示:
图一:数据库结构
图二:schema内容结构
如果我创建了一个包含大写英文字母的表名(collection name),就会报错。
解决办法:把包含大写字母的collection删掉,重新建全为小写的collectionName,问题解决。(我也尝试着直接修改collectionname而不删掉表,但是并没有成功,如果有朋友解决了请不吝赐教~)
4.参考链接
- Presto Docker:https://docs.starburstdata.com/latest/installation/docker.html
- Presto Docker Image:https://github.com/prestosql/presto/tree/master/docker
- presto + mongodb: https://blog.csdn.net/u011418530/article/details/94713417
- presto mongodb connector:https://prestodb.io/docs/current/connector/mongodb.html
- presto驱动使用:https://prestodb.io/docs/current/installation/jdbc.html
- presto连接mysql:https://blog.csdn.net/kongxx/article/details/83386696
- centos防火墙:https://blog.csdn.net/yw_1207/article/details/89959357
- CollectionName为大写字母时报错解决:https://stackoverflow.com/questions/55903936/not-able-to-fetch-records-from-mongodb-using-presto