ByConity BSP 解锁数据仓库新未来

devtools/2024/12/31 20:50:12/

在这里插入图片描述

在这里插入图片描述

文章目录

    • 前言
    • BSP 模式简介
    • 基于 TPC-DS 的 ELT 活动
      • 测试环境
      • 登录 ECS
      • 数据查询配置
    • 执行 02.sql
      • sql解释:
        • 1. 第一步:创建 wscs 临时表
        • 2. 第二步:创建 wswscs 临时表
        • 3. 第三步:对比 2001 年和 2002 年的数据
          • 子查询 1:提取 2001 年数据
          • 子查询 2:提取 2002 年数据
          • 主查询:对比相邻年份的销售额
        • 最终输出:
    • 测试结果与心得
    • 总结

前言

在现代数据分析场景中,实时数仓与离线数仓各有侧重:实时数仓注重低延迟的数据入库与即时分析能力,而离线数仓则强调复杂任务的稳定执行及高效的内存管理。为满足用户多样化的数据需求,ByConity 作为一款开源云原生数据仓库,提供了全新的 BSP 模式,大幅提升了数据仓库的适用场景与性能表现。

BSP 模式简介

BSP 模式(Bulk Synchronous Parallel)为 ByConity 带来了以下关键能力:

  1. Task 级容错:在数据处理过程中实现更高效的错误恢复机制,确保任务的稳定性。
  2. 更细粒度的调度:以任务为单位进行资源调度,优化计算资源的使用效率。
  3. 资源感知调度:根据当前资源情况动态调整任务分配,提升并行执行的效率。

通过 BSP 模式,ByConity 实现了一站式的数据接入、加工和分析流程,为用户提供了更加便捷、高效的数据分析工具。

基于 TPC-DS 的 ELT 活动

为了让用户直观感受 BSP 模式的强大性能,ByConity 提供了基于 TPC-DS 1TB 数据集 的测试活动。以下是完整的测试过程分享。

测试环境

测试环境基于火山引擎 ECS,采用以下配置:

组件规格
ByConity 版本v1.0.1
Worker 节点4 * 16core 64G
Server 节点1 * 16core 64G
TSO1 * 4core 16G
Daemon Manager1 * 4core 16G
Resource Manager1 * 8core 32G
存储对象存储 TOS
FoundationDB3 * 4core 16G

登录 ECS

根据活动提供的登录凭据,通过 SSH 连接到远程 ECS 服务器。以下为登录过程:

  • MacOS 用户

    • 打开终端,输入以下命令并回车:
      ssh -p 23 root@14.103.145.182
      
    • 输入 yes 确认连接,并输入提供的登录密码。
  • 避免断连:创建 tmux 会话:

    tmux new -s your_session_name
    

  • 启动客户端:
    clickhouse client --port 9010
    

数据查询配置

  • 切换至测试数据库:
    use test_elt;
    

  • 设置 SQL 方言:
    set dialect_type = 'ANSI';
    

执行 02.sql

执行 TPC-DS 测试集查询, source 02.sql; 如下:

with wscs as(select sold_date_sk,sales_pricefrom (select ws_sold_date_sk sold_date_sk,ws_ext_sales_price sales_pricefrom web_sales union allselect cs_sold_date_sk sold_date_sk,cs_ext_sales_price sales_pricefrom catalog_sales) x),wswscs as (select d_week_seq,sum(case when (d_day_name='Sunday') then sales_price else null end) sun_sales,sum(case when (d_day_name='Monday') then sales_price else null end) mon_sales,sum(case when (d_day_name='Tuesday') then sales_price else  null end) tue_sales,sum(case when (d_day_name='Wednesday') then sales_price else null end) wed_sales,sum(case when (d_day_name='Thursday') then sales_price else null end) thu_sales,sum(case when (d_day_name='Friday') then sales_price else null end) fri_sales,sum(case when (d_day_name='Saturday') then sales_price else null end) sat_salesfrom wscs,date_dimwhere d_date_sk = sold_date_skgroup by d_week_seq)select d_week_seq1,round(sun_sales1/sun_sales2,2),round(mon_sales1/mon_sales2,2),round(tue_sales1/tue_sales2,2),round(wed_sales1/wed_sales2,2),round(thu_sales1/thu_sales2,2),round(fri_sales1/fri_sales2,2),round(sat_sales1/sat_sales2,2)from(select wswscs.d_week_seq d_week_seq1,sun_sales sun_sales1,mon_sales mon_sales1,tue_sales tue_sales1,wed_sales wed_sales1,thu_sales thu_sales1,fri_sales fri_sales1,sat_sales sat_sales1from wswscs,date_dim where date_dim.d_week_seq = wswscs.d_week_seq andd_year = 2001) y,(select wswscs.d_week_seq d_week_seq2,sun_sales sun_sales2,mon_sales mon_sales2,tue_sales tue_sales2,wed_sales wed_sales2,thu_sales thu_sales2,fri_sales fri_sales2,sat_sales sat_sales2from wswscs,date_dim where date_dim.d_week_seq = wswscs.d_week_seq andd_year = 2001+1) zwhere d_week_seq1=d_week_seq2-53order by d_week_seq1;

sql解释:

这段 SQL 语句实现了对比两个年份(2001年和2002年)的每周日到周六的销售数据的相对变化。以下是对其结构和逻辑的详细解析:

1. 第一步:创建 wscs 临时表
with wscs as(select sold_date_sk, sales_pricefrom (select ws_sold_date_sk sold_date_sk, ws_ext_sales_price sales_pricefrom web_sales union allselect cs_sold_date_sk sold_date_sk, cs_ext_sales_price sales_pricefrom catalog_sales) x)

功能:

  • web_salescatalog_sales 两个表的数据合并到一个统一的临时表 wscs 中。
  • 提取销售日期键 (sold_date_sk) 和销售价格 (sales_price) 两列。

逻辑:

  1. web_sales 表:
    • 提取 ws_sold_date_sk(销售日期)和 ws_ext_sales_price(销售额)。
  2. catalog_sales 表:
    • 提取 cs_sold_date_sk(销售日期)和 cs_ext_sales_price(销售额)。
  3. union all
    • 不去重地合并两表的记录。
2. 第二步:创建 wswscs 临时表
 wswscs as (select d_week_seq,sum(case when (d_day_name='Sunday') then sales_price else null end) sun_sales,sum(case when (d_day_name='Monday') then sales_price else null end) mon_sales,sum(case when (d_day_name='Tuesday') then sales_price else  null end) tue_sales,sum(case when (d_day_name='Wednesday') then sales_price else null end) wed_sales,sum(case when (d_day_name='Thursday') then sales_price else null end) thu_sales,sum(case when (d_day_name='Friday') then sales_price else null end) fri_sales,sum(case when (d_day_name='Saturday') then sales_price else null end) sat_salesfrom wscs,date_dimwhere d_date_sk = sold_date_skgroup by d_week_seq)

功能:

  • 按照每周的编号(d_week_seq)计算每周每天(周日到周六)的总销售额。

逻辑:

  1. 关联 wscsdate_dim 表:
    • 利用 d_date_sk = sold_date_sk,将销售日期与日期维表匹配。
  2. 按周聚合:
    • 利用 d_week_seq 对每周数据分组。
  3. case when 语句:
    • 对每天的销售额分别求和,忽略不属于该天的数据。

结果:
wswscs 包含每周每天的销售额字段,例如 sun_salesmon_sales 等。

3. 第三步:对比 2001 年和 2002 年的数据
子查询 1:提取 2001 年数据
 (select wswscs.d_week_seq d_week_seq1,sun_sales sun_sales1,mon_sales mon_sales1,tue_sales tue_sales1,wed_sales wed_sales1,thu_sales thu_sales1,fri_sales fri_sales1,sat_sales sat_sales1from wswscs, date_dim where date_dim.d_week_seq = wswscs.d_week_seq andd_year = 2001)
  • 提取 2001 年的每周每天销售额,并标记为 *_sales1
  • d_week_seq1 表示 2001 年的周编号。
子查询 2:提取 2002 年数据
 (select wswscs.d_week_seq d_week_seq2,sun_sales sun_sales2,mon_sales mon_sales2,tue_sales tue_sales2,wed_sales wed_sales2,thu_sales thu_sales2,fri_sales fri_sales2,sat_sales sat_sales2from wswscs, date_dim where date_dim.d_week_seq = wswscs.d_week_seq andd_year = 2002)
  • 提取 2002 年的每周每天销售额,并标记为 *_sales2
  • d_week_seq2 表示 2002 年的周编号。
主查询:对比相邻年份的销售额
 select d_week_seq1,round(sun_sales1/sun_sales2,2),round(mon_sales1/mon_sales2,2),round(tue_sales1/tue_sales2,2),round(wed_sales1/wed_sales2,2),round(thu_sales1/thu_sales2,2),round(fri_sales1/fri_sales2,2),round(sat_sales1/sat_sales2,2)from ...where d_week_seq1 = d_week_seq2 - 53order by d_week_seq1;

功能:

  • 对比 2001 年每周与对应的 2002 年同一周(相差 53 周)的销售额。

逻辑:

  1. 字段匹配:
    • 根据 d_week_seq1 = d_week_seq2 - 53 确保对比的是相邻年份的同一周。
  2. 字段计算:
    • 利用 round(sun_sales1 / sun_sales2, 2) 等公式计算每周日到周六的销售额变化比率。
  3. 排序:
    • 按周编号(d_week_seq1)从小到大排序。
最终输出:

表格展示 2001 年相较于 2002 年的每周每天销售额变化百分比。

周编号周日变化周一变化周二变化周三变化周四变化周五变化周六变化
Week11.100.951.201.050.981.151.00

执行后截图如下:

测试结果与心得

通过执行 TPC-DS 的模拟查询,实际验证了 ByConity 在 ELT 任务中的强大表现:

  1. 性能提升:BSP 模式在任务分解与调度上表现优异,查询任务耗时显著减少。
  2. 任务稳定性:在高并发与复杂场景下依旧保持出色的容错能力。
  3. 一站式体验:用户无需额外切换工具即可完成数据加工与分析,全流程高效流畅。

总结

ByConity 的 BSP 模式为实时数仓和离线数仓之间架起了一座桥梁,其灵活性与高效性让企业能够更好地应对多变的数据分析需求。本次测试验证了其在 ELT 场景中的实际效果,也展示了 ByConity 在未来数据仓库领域的潜力与前景。

如果您也想体验 ByConity 的强大功能,欢迎参与测试活动,亲自感受开源数据仓库的无限可能!


http://www.ppmy.cn/devtools/146256.html

相关文章

html 通用错误页面

因为业务业务需求,需要做一个错误的页面,避免出现错误信息或者相关业务信息泄露,所以在Nginx配置一个通用错误页面。 完成后页面访问路径: /error.htmlstatus500&uri/user&time_local2024年7月29日10:16:04&remote_ad…

Mysql高级部分总结(二)

MySQL的内部日志 binlog记载的是update/delete/insert这样的SQL语句,而redo log记载的是物理修改的内容(xxxx页修改了xxx)。 binlog无论MySQL用什么引擎,都会有,而redo log是MySQL的InnoDB引擎所产生的。 redo log事务开始的时候,就开始记录每次的变更信息,而binlog是在…

【数据库原理】数据增删改查,DML、单表查询、多表连接查询

DML数据操纵语言,处理对象是数据本身。 DDL数据定义语言,处理对象是数据表的结构。 数据库中数据处理主要包括增删改查。查询属于重点部分。 假设数据库中有表: student(sno,sname,sex,class); #学生(学号,姓名&…

LeetCode - Google 校招100题 第6天 回溯法(Backtracking) (8题)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144743505 LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21题)校招100题 第3天 动态规划(DP) (20题)

python web知识点梳理

目录 1、第1章 Django概述 (1)环境搭建:需要安装django,使用国内镜像 (2)创建项目和应用 2、第2章 路由系统 (1)路由工作原理: (2)内置路由转换器 (3)路由分发:include函数 (4)向视图传递额外参数 (5)命名空间 ① URL命名和reverse解析函数 ② 应…

微信小程序原生,tdesign时间选择器,t-date-time-picker封装成组件,开始时间结束时间

1. 首先&#xff0c;在项目的 components 目录下创建一个新的文件夹&#xff0c;例如 date-picker&#xff0c;并在其中创建以下文件&#xff1a; date-picker.wxmldate-picker.wxssdate-picker.jsdate-picker.json 2.date-picker.wxml <view class"date-picker"…

策略模式以及优化

使用场景 在一个条件语句中又包含了多个条件语句 具体策略类会过多 把抽象策略和具体策略放在一个枚举类里。 方法 exe() 相当于抽象策略&#xff0c;而A和B就相当于实现了抽象策略的具体策略 这样就只需要一个枚举类就可以解决具体策略类过多的问题 public enum Strategy {A{O…

【ETCD】【实操篇(十二)】分布式系统中的“王者之争”:基于ETCD的Leader选举实战

分布式系统中&#xff0c;Leader选举是一个非常重要的概念。Leader选举确保系统中的某个节点&#xff08;Leader&#xff09;负责执行关键任务&#xff0c;而其他节点作为备份&#xff0c;等待Leader的失效或者任务完成后重新选举出新的Leader。通过Leader选举机制&#xff0c;…