合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
当涉及到企业分析场景时,所使用的数据通常源自多样的业务数据,这些数据系统大多采用以行为主的存储结构,比如支付交易记录、用户购买行为、传感器报警等。在数仓及分析领域,海量数据则主要采按列的方式储存。因此,将数据从行级转换成列级存储是建立企业数仓的基础能力。
传统方式是采用Extract-Transform-Load (ETL)来将业务数据转换为适合数仓的数据模型,然而,这依赖于独立于数仓外的ETL系统,因而维护成本较高。但随着云计算时代的到来,云数据仓库具备更强扩展性和计算能力,也要求改变传统的ELT流程。
火山引擎ByteHouse是一款基于开源ClickHouse推出的云原生数据仓库,为用户提供极速分析体验,能够支撑实时数据分析和海量数据离线分析,同时还具备便捷的弹性扩缩容能力,极致分析性能和丰富的企业级特性。凭借其强大的计算能力,可以全面支持Extract-Load-Transform (ELT)的能力,从而使用户免于维护多套异构系统。
具体而言,用户可以将数据导入后,通过自定义的SQL语句,在ByteHouse内部进行数据转换,而无需依赖独立的ETL系统及资源。这样,用户只需要采用统一的SQL方式来完成数据转换操作。
在本文中,我们将重点介绍ByteHouse遇到的挑战,以及如何通过3大能力建设实现完备的ELT能力。
我们先从一个简单的SSB(start-schema-benchmark)场景出发, 其中包含:
图片
ssb.png
在SSB的查询分析中,我们发现大部分的查询都涉及到事实表和维表的join,因此可以通过Transform的步骤,将事实表“打平”。打平所用到的SQL如下:
insert into ssb_flat
select * from
lineorder l
join customer c on l.lo_custkey = c.c_custkey
join part p on l.lo_partkey = p.p_partkey
join supplier s on l.lo_suppkey = s.s_suppkey
where l.lo_orderdate = <bizdate>
TOP