首页 > 其他分享 >文盘Rust -- rust 连接云上数仓 starwift

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

时间:2023-02-07 10:33:05浏览次数:67  
标签:数仓 rs -- 文盘 let starwift com clickhouse

作者:京东云 贾世闻

最近想看看 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 测试实例。 下期见。

标签:数仓,rs,--,文盘,let,starwift,com,clickhouse
From: https://www.cnblogs.com/Jcloud/p/17097536.html

相关文章

  • 07 数据库查询(1) | OushuDB 数据库使用入门
    大家好,接下来我们一起学习数据查询的基础部分。 首先,什么是数据查询?从数据库中检索数据的过程或命令叫做查询。通用语法在SQL里,SELECT命令用于声明查询,通用语法如下:SE......
  • 人柱力和佩恩六道,谁才是湖仓一体的终极形态?
    很多小伙伴一直搞不懂什么是湖仓一体,查阅很多资料得到的都是基于不同厂商的产品和方案介绍,而非清晰的概念与行业共识,所以笔者特别策划了一篇湖仓一体的比较分析,通过《火影忍......
  • 泥石流和山体滑坡的区别、形成原因及防治方法
    什么是“泥石流”和“滑坡”?泥石流是山区常见的一种自然灾害,对山区的城镇、村庄、铁路、公路、农田、水利设施等常造成严重危害。我国汶川特大地震过后连续发生严重的“泥......
  • 06 数据操纵之数据更新与删除 | OushuDB 数据库使用入门
    更新数据修改已经存储在数据库中的数据的行为叫做更新。你可以更新单独的一行,也可以更新表中所有的行,还可以更新其中的一部分行。我们可以独立地更新每个列,而其它的列则不......
  • 05 数据操纵之插入数据 | OushuDB 数据库使用入门
    大家好,这一节课我们来学习数据操纵,在完成数据库的创建后,我们需要对数据库进行读写操作。最常见的数据操纵方式包括插入数据、更新数据和删除数据。目前OushuDB兼容的表格式......
  • 03 如何修改数据表? | OushuDB 数据库使用入门
    修改表当我们创建了一个表后发现自己犯了一个错误,或者是应用的需求发生了变化,那么我们可以删除这个表然后重新创建它。但是如果这个表已经填充了许多数据,或者该表已经被其它......
  • 02 如何创建数据表? | OushuDB 数据库使用入门
    基本概念在关系型数据库中,表由行和列组成。其中表的列的数目和顺序是固定的,每个列都有一个名字,并且有指定的数据类型,即限制着这个列可以存储的范围。比如,声明为数值类型的列......
  • 01 如何创建数据库? | OushuDB 数据库使用入门
    创建和管理数据库数据库是使用CREATEDATABASE命令创建的,可以通过DROPDATABASE命令删除。如果我们要查看现有数据库的集合,可以检查系统表pg_database,比如通过查询语句:SELEC......
  • 关于科赫雪花以及使用Pyinstaller打包
    科赫雪花(一)1importturtle2defkoch(size,n):3ifn==0:4turtle.fd(size)5else:6foranglein[0,60,-120,60]:7......
  • 谈谈我对于关键思考的理解
    作者:闵大为(天未)之前看过杨振宁的一个采访,说他最大的成就,不是获得了诺贝尔奖的研究,而是之前的一个普通理论的研究:他坚信事物是遵循一定规律的,不是大家认为的不可捉摸,花了......