Presto连接mongodb实现数据查询

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.参考链接

  1. Presto Docker:https://docs.starburstdata.com/latest/installation/docker.html
  2. Presto Docker Image:https://github.com/prestosql/presto/tree/master/docker
  3. presto + mongodb: https://blog.csdn.net/u011418530/article/details/94713417
  4. presto mongodb connector:https://prestodb.io/docs/current/connector/mongodb.html
  5. presto驱动使用:https://prestodb.io/docs/current/installation/jdbc.html
  6. presto连接mysql:https://blog.csdn.net/kongxx/article/details/83386696
  7. centos防火墙:https://blog.csdn.net/yw_1207/article/details/89959357
  8. CollectionName为大写字母时报错解决:https://stackoverflow.com/questions/55903936/not-able-to-fetch-records-from-mongodb-using-presto
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值