开源云原生数据仓库ByConity ELT 的测试体验

举报
梦笔生花 发表于 2024/12/18 22:08:47 2024/12/18
【摘要】 ByConity 是分布式的云原生SQL数仓引擎,擅长交互式查询和即席查询,具有支持多表关联复杂查询、集群扩容无感、离线批数据和实时数据流统一汇总等特点。ByConity 是一个云原生的、高性能的实时数据仓库,而 ELT(Extract,Load,Transform)是一种数据集成和处理的模式。ByConity:它采用了先进的分布式架构和存储计算分离的设计理念,能够高效地处理大规模的实时数据...

ByConity 是分布式的云原生SQL数仓引擎,擅长交互式查询和即席查询,具有支持多表关联复杂查询、集群扩容无感、离线批数据和实时数据流统一汇总等特点。

ByConity 是一个云原生的、高性能的实时数据仓库,而 ELT(Extract,Load,Transform)是一种数据集成和处理的模式。

ByConity:它采用了先进的分布式架构和存储计算分离的设计理念,能够高效地处理大规模的实时数据,为企业提供快速、准确的数据分析和决策支持。

ELT:与传统的 ETL(Extract,Transform,Load)不同,ELT 强调先将数据提取并加载到目标系统中,然后再在目标系统中进行数据转换。这种模式更适合处理大数据量和复杂的数据转换逻辑,能够充分利用目标系统的计算资源和功能。

ByConity 中的 ELT 实现


数据提取(Extract):ByConity 支持多种数据源的连接和数据提取,包括关系型数据库、文件系统、消息队列等。它提供了丰富的连接器和数据读取接口,可以方便地从不同的数据源中获取数据。



数据加载(Load):将提取的数据加载到 ByConity 中,可以通过批量加载或实时加载的方式进行。ByConity 支持高效的数据加载机制,能够快速将大量数据写入到数据仓库中,并保证数据的一致性和完整性。



数据转换(Transform):在 ByConity 中,可以使用 SQL 或其他数据处理语言进行数据转换操作。ByConity 提供了强大的计算引擎和丰富的函数库,能够支持复杂的数据转换逻辑,如数据清洗、数据聚合、数据关联等。


一、测试环境

二、登录环境

1、命令行登录ECS

Windows10以上可以使用自带cmd命令行来登录。也可以用最新版本的putty。我测试的环境是Windows11,以下为测试的登录截图。

2、为避免使用时超时自动断开连接,请运行tmux new -s $user_id(如 tmux new -s user0001)命令创建一个新的tmux会话,其中$user_id是可以自定义的会话名称。

3、执行 clickhouse client --port 9010命令进入客户端。

三、执行查询

1、使用测试用数据库 test_elt:

use test_elt

2、由于TPC-DS定义的查询语法为标准 SQL,设置数据库会话的方言类型为 ANSI:

set dialect_type = 'ANSI'

3、选择 TPC-DS 的 99 个查询中你希望的执行,SQL 列表见 https://github.com/ByConity/ByConity/tree/master/tests/optimizers/tpcds/queries。其中部分查询会因为内存限制而执行失败,常见会执行失败的查询为:q78,请优先选择 q78 以便执行步骤 4。

with ws as

(select d_year AS ws_sold_year, ws_item_sk,

ws_bill_customer_sk ws_customer_sk,

sum(ws_quantity) ws_qty,

sum(ws_wholesale_cost) ws_wc,

sum(ws_sales_price) ws_sp

from web_sales

left join web_returns on wr_order_number=ws_order_number and ws_item_sk=wr_item_sk

join date_dim on ws_sold_date_sk = d_date_sk

where wr_order_number is null

group by d_year, ws_item_sk, ws_bill_customer_sk

),

cs as

(select d_year AS cs_sold_year, cs_item_sk,

cs_bill_customer_sk cs_customer_sk,

sum(cs_quantity) cs_qty,

sum(cs_wholesale_cost) cs_wc,

sum(cs_sales_price) cs_sp

from catalog_sales

left join catalog_returns on cr_order_number=cs_order_number and cs_item_sk=cr_item_sk

join date_dim on cs_sold_date_sk = d_date_sk

where cr_order_number is null

group by d_year, cs_item_sk, cs_bill_customer_sk

),

ss as

(select d_year AS ss_sold_year, ss_item_sk,

ss_customer_sk,

sum(ss_quantity) ss_qty,

sum(ss_wholesale_cost) ss_wc,

sum(ss_sales_price) ss_sp

from store_sales

left join store_returns on sr_ticket_number=ss_ticket_number and ss_item_sk=sr_item_sk

join date_dim on ss_sold_date_sk = d_date_sk

where sr_ticket_number is null

group by d_year, ss_item_sk, ss_customer_sk

)

select top 100

ss_customer_sk,

round(ss_qty/(coalesce(ws_qty,0)+coalesce(cs_qty,0)),2) ratio,

ss_qty store_qty, ss_wc store_wholesale_cost, ss_sp store_sales_price,

coalesce(ws_qty,0)+coalesce(cs_qty,0) other_chan_qty,

coalesce(ws_wc,0)+coalesce(cs_wc,0) other_chan_wholesale_cost,

coalesce(ws_sp,0)+coalesce(cs_sp,0) other_chan_sales_price

from ss

left join ws on (ws_sold_year=ss_sold_year and ws_item_sk=ss_item_sk and ws_customer_sk=ss_customer_sk)

left join cs on (cs_sold_year=ss_sold_year and cs_item_sk=ss_item_sk and cs_customer_sk=ss_customer_sk)

where (coalesce(ws_qty,0)>0 or coalesce(cs_qty, 0)>0) and ss_sold_year=1998

order by

ss_customer_sk,

ss_qty desc, ss_wc desc, ss_sp desc,

other_chan_qty,

other_chan_wholesale_cost,

other_chan_sales_price,

ratio

4、查询失败后,在失败的 SQL 最后加上设置后再次执行:

SETTINGSbsp_mode = 1,distributed_max_parallel_size = 12;

其中参数distributed_max_parallel_size可以设置为 4 的其他整数倍(因为 Worker 的数量为4)。注意要把limit 100后的分号去掉。

添加参数后执行成功。

5、选择Q67查询进行执行,在执行成功的查询中,添加参数限制查询的最大内存使用量,如:

SETTINGSmax_memory_usage=40000000000;

(单位为 B,当前约合 37.25 GB)

将内存限制为合适的值,引发 oom。随后执行步骤 4,完成查询。

四、测试反馈

ByConity增加的BSP(Bulk Synchronous Parallel)模式是一个重要的功能更新,旨在提升数据处理的效率和容错能力。


distributed_max_parallel_size参数用于控制分布式查询中表扫描的并行度。通过调整这个参数,用户可以根据集群的资源情况和查询的需求来优化查询性能。


max_memory_usage参数用于限制单个查询在执行过程中可以使用的最大内存量。通过设置这个参数,可以防止单个查询占用过多内存资源,影响其他查询的执行和系统的稳定性。


通过合理调整distributed_max_parallel_size和max_memory_usage的值,用户可以在保证查询性能的同时,避免资源过度消耗和查询失败的风险。

五、产品介绍

ByConity的ELT能力能够简化数据处理的复杂性,提高系统的响应速度和可靠性。通过将大部分转换操作留在分析阶段,ByConity能够更好地适应复杂的数据处理需求,特别是在实时数仓和离线数仓的场景中表现出色‌。

从 ByConity 开源之初,我们一直将产品定位为开源云原生数据仓库。区别于传统 OLAP 产品,ByConity 采用存算分离的云原生架构,通过这种架构获得了弹性和降低资源浪费的优势,但与此同时也在一定程度上提高了产品的复杂度。定位为云原生数据仓库,是希望能够承担更多类型、更复杂的分析任务负载,无论是在线的实时分析还是离线数据的清洗/加工任务都能够胜任。更全面的能力能够帮助用户降低数据分析平台的整体复杂度。

传统的 OLAP 产品通过数据索引、列式存储、向量化执行等技术,注重对实时分析或者 Ad-hoc 分析的快速反应,满足低时延的要求。在数据加载进 OLAP 产品之前,往往需要经过复杂的数据清洗和转换过程,也就是大家熟知的 ETL 任务。在传统的数据分析架构中,这部分工作是由 Hive、Spark、Flink 等产品来完成的。

体验网址:https://gitcode.com/gh_mirrors/by/ByConity/overview?utm_source=csdn_github_accelerator&isLogin=1


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。