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

文章介绍了如何在Rust中与京东云的Starwfit云原生数仓进行交互,包括通过TCP和HTTP协议建立连接的示例代码。在实验环境中,作者展示了创建Starwfit集群、设置白名单和公网连接的步骤,并提到了在实际生产环境中需要注意的安全配置。此外,文章还提及了在集成过程中遇到的依赖冲突问题,承诺在后续内容中分享解决方法。
摘要由CSDN通过智能技术生成

作者:京东云 贾世闻

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

Starwfit 是京东云自主研发的新一代云原生数据仓库,通过存算分离降低了存储成本,同时兼具性能和扩展弹性。其写入和查询速度可达到传统数据仓库的数倍,为用户提供实时数据分析能力。广泛应用于流量分析、精准营销、用户画像、广告实时竞价、BI报表分析、日志分析、促销选品、物联网等业务场景。

广告打到这里,言归正传,看看 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 测试实例。
下期见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值