文盘Rust -- rust 连接云上数仓

作者:京东科技 贾世闻

最近想看看 rust 如何集成 clickhouse,又犯了好吃懒做的心理(不想自己建环境),刚好我东发布了兼容ck 的云原生数仓 Starwfit,于是搞了个实例折腾一番,看看 rust 如何与 starwift 打交道。

创建集群

  • 创建用户

  • 开启白名单

为了保证starwift能够被外部资源访问需要开启白名单,默认情况下新创建的实例只有该实例所在vpc下才能访问

为了方便,实验环境直接编辑 default 分组,编辑 ip 列表为 0.0.0.0/0,对所有ip开放。在实际生产环境需要根据实际情况配置白名单避免安全问题。

  • 开启公网连接

为了实验方便,开启公网访问域名便于开发和测试

mac客户端安装

  • 安装客户端

    macos 客户端安装

     curl -O 'https://builds.clickhouse.com/master/macos/clickhouse' && chmod a  +x ./clickhouse
    
    

    其他客户端安装 参见 clickhosue 官方文档

  • 测试连通性

    clickhouse client --host service-terrabase-9s29mdlsb7.  terrabase-9s29mdlsb7-hb-public.jvessel2.jdcloud.com \
    --port 9000 \
    --user sample \
    --password xxxxxx
    
    
    clickhouse:) show databases
    
    

rust 连接 starwift

starwift 支持 tcp 和 http 两种协议连接server。下面我们分别给出两种方式的示例代码

  • tcp 连接

    • 依赖 crate

      # clickhouse tcp
      tokio = { version = "1.21.2", features = ["full"] }
      clickhouse-rs = { git = "https://github.com/suharev7/clickhouse-rs", features = ["default"]}
      
      
    • 示例代码

      use clickhouse_rs::Pool;
      
      #[tokio::main]
      async fn main() {
          let database_url="tcp://username:password@service-terrabase-9s29mdlsb7.terrabase-9s2mdsb-hb-public.jvessel2.jdcloud.com:9000?compression=lz4".to_string();
          let pool = Pool::new(database_url);
      
          let mut client = pool.get_handle().await.unwrap();
          let sql = "show databases;";
          let r = client.query(sql).fetch_all().await;
          println!("result is: {:?}", r);
      }
      
      
      
  • http 连接

    • 依赖 crate

      # clickhouse http
      clickhouse = {git = "https://github.com/loyd/clickhouse.rs", features = ["test-util"]}
      
      
    • 示例代码

      use clickhouse::Client;
      use clickhouse::Row;
      use serde::{Deserialize, Serialize};
      
      #[derive(Debug, Row, Serialize, Deserialize)]
      struct Database {
          name: String,
      }
      
      #[tokio::main]
      async fn main() {
          let client = Client::default()
          .with_url("https://service-terrabase-9s29mdlsb7.terrabase-9sdlb7-hb-public.jvessel2.jdcloud.com:8123")
          .with_user("username")
          .with_password("password");
      
          let sql = "SHOW databases";
          let r = client.query(sql).fetch_all::<Database>().await;
          println!("result is: {:?}", r);
      }
      
      

测试过程中,遇到了依赖冲突问题,clickhouse-rs 和 clickhouse.rs 同时依赖了 clickhouse-rs-cityhash-sys 但依赖方式不同,导致编译不通过,下一期详细聊聊踩坑及爬坑过程。 再次感谢京东云数据库团队提供的 starwift 测试实例。 下期见。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4090830/blog/7631794

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。