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

京东云开发者
• 阅读 476

作者:京东云 贾世闻

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

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

言归正传,看看 rust 如何与 starwift 打交道。

创建集群

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

  • 创建用户

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

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

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

  • 开启公网连接

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

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

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

点赞
收藏
评论区
推荐文章
文盘Rust -- 本地库引发的依赖冲突
clickhouse的原生rust客户端目前比较好的有两个clickhousers 和 clickhouse.rs 。两个库在单独使用时没有任何问题,但是,在同一工程同时引用时会报错。本篇内容主要讲解如何用rust语言解决本地库引发的依赖冲突问题
文盘Rust -- 安全连接 TiDB/Mysql
最近在折腾rust与数据库集成,为了偷懒,选了TidbCloudServerlessTier作为数据源。Tidb无疑是近五年来最优秀的国产开源分布式数据库,TidbCloudServerlessTier作为pingcap旗下的云产品方便又经济,这次使用还有一些小惊喜,这个后文再说。
Stella981 Stella981
3年前
Flink 助力美团数仓增量生产
简介:本文由美团研究员、实时计算负责人鞠大升分享,主要介绍Flink助力美团数仓增量生产的应用实践。内容包括:1、数仓增量生产;2、流式数据集成;3、流式数据处理;4、流式OLAP应用;5、未来规划。一、数仓增量生产1.美团数仓架构先介绍一下美团数仓的架构以及增量生产。如下图所示,这是美团数仓的简单架构,我
Stella981 Stella981
3年前
Rust语言宏原理及开发教程
Rust语言最强大的一个特点就是可以创建和利用宏/Macro。不过创建Rust宏看起来挺复杂,常常令刚接触Rust的开发者心生畏惧。这片文章的目的就是帮助你理解RustMacro的基本运作原理,学习如何创建自己的Rust宏。相关链接:在线学编程(https://www.oschina.net/action/GoToLink?urlhttp%3
文盘Rust -- tonic-Rust grpc初体验 | 京东云技术团队
gRPC是开发中常用的开源高性能远程过程调用(RPC)框架,tonic是基于HTTP/2的gRPC实现,专注于高性能、互操作性和灵活性。该库的创建是为了对async/await提供一流的支持,并充当用Rust编写的生产系统的核心构建块。今天我们聊聊通过使用tonic调用grpc的的具体过程。
京东云开发者 京东云开发者
8个月前
如何判断一个数仓模型的好坏?
一个企业面对大数据的时候,势必会遇到数仓开发,那么数仓开发完之后,如何判断一个数仓模型的好坏?根据自己经验,总结以下几点供参考,评判一个数仓模型的好处需要考虑以下几个方面:1:数据准确性:数仓模型的数据必须准确,能够真实反映业务的情况,否则整个数仓就失去了
京东云开发者 京东云开发者
6个月前
OSS_PIPE:Rust编写的大规模文件迁移工具| 京东云技术团队
文盘rust好久没有更新了。这段时间笔者用rust写了个小东西,跟各位分享一下背景随着业务的发展,文件数量和文件大小会急剧增加,文件迁移的数量和难度不断攀升。osspipe是rust编写的文件迁移工具,旨在支撑大规模的文件迁移场景。编写osspipe的初衷
文盘Rust —— rust连接oss | 京东云技术团队
对象存储是云的基础组件之一,各大云厂商都有相关产品。这里跟大家介绍一下rust与对象存储交到的基本套路和其中的一些技巧。
文盘Rust -- FFI 浅尝 | 京东云技术团队
rustFFI是rust与其他语言互调的桥梁,通过FFIrust可以有效继承C语言的历史资产。本期通过几个例子来聊聊rust与C语言交互的具体步骤。
文盘Rust——起手式,CLI程序 | 京东云技术团队
我们来看看如何通过几个步骤快速的实现一个功能相对齐全的CLI程序。和做饭一样,能够快速获得成就感的方式是找半成品直接下锅炒一盘