点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(已更完)
- Kylin(正在更新...)
章节内容
上节我们完成了如下的内容:
- Apache Kylin 构建Cube 准备数据
- Apache Kylin 构建Cube 测试数据
Cube 介绍
Apache Kylin 是一个开源的分布式分析引擎,专注于提供大数据的实时OLAP(在线分析处理)能力。Cube(立方体)是 Apache Kylin 的核心概念之一,通过预计算大规模数据的多维数据集合,加速复杂的 SQL 查询。下面详细介绍 Cube 的关键点:
Cube 的基本概念
Kylin 中的 Cube 是通过对一组事实表(通常是业务数据表)进行多维建模后,生成的预计算数据结构。Cube 涉及对多维数据的度量和维度的组合,从而可以在查询时通过检索预先计算的结果来显著减少计算开销。
- 维度(Dimension):数据中用于分组、筛选和切片的数据字段,例如时间、地区、产品等。
- 度量(Measure):通常是需要进行聚合计算的数据字段,例如销售额、订单数等。
- Cuboid:每个 Cube 由多个 Cuboid 构成,Cuboid 是一个特定维度组合的子集。Cube 中每种维度组合都会生成一个 Cuboid,每个 Cuboid 存储了该组合下的预聚合结果。
Cube 的创建过程
- 数据建模:首先在 Kylin 中创建一个数据模型(Data Model),这个模型定义了事实表和维度表之间的关系,类似于星型或雪花型模式。模型中也定义了需要聚合的度量字段。
- Cube 设计:基于数据模型设计 Cube,指定 Cube 的维度和度量。Kylin 会根据定义自动计算所有可能的维度组合(Cuboid)。
- 构建 Cube:构建过程会读取底层数据源(如 Hive、HBase、Kafka),然后根据指定的维度和度量生成每个 Cuboid 的预计算数据。这些预计算结果存储在 HBase 或其他存储引擎中。
Cube 的查询与优化
- 查询加速:当有 SQL 查询请求到达时,Kylin 会根据查询所涉及的维度组合,选择合适的 Cuboid 返回结果,避免了实时计算,极大地提高了查询性能。
- Cube 优化:为了控制 Cube 大小和加速构建,Kylin 支持裁剪 Cube,通过配置仅生成部分 Cuboid,这称为"Aggregation Group",可以减少冗余计算。
实时 OLAP
Kylin 4.0 引入了对实时 OLAP 的支持,使用 Kafka 作为实时数据流输入,构建实时 Cube。通过使用 Lambda 架构,Kylin 可以支持实时和批处理数据的整合分析。
Cube 的典型应用场景
- 大规模数据分析:Cube 适用于分析超大规模的数据集,通过预计算方式加速查询。
- 实时分析:实时 Cube 允许用户在近乎实时的基础上分析流数据。
- 商业智能(BI)工具的集成:Kylin 提供与 Tableau、Power BI 等常见 BI 工具的集成,用户可以使用熟悉的 SQL 查询语言进行复杂的多维分析。
维度表优化
- 要具有数据一致性,主键值必须是唯一的(否则Kylin构建过程会报错)
- 维度表越小越好,因为Kylin会将维度表加载到内存中供查询使用,过大的表不适合作为维度表,默认的阈值是300MB
- 改变频率低,Kylin会在每次构建中试图重用维度表的快照(Snapshot),如果维度表经常改变的话,重用就会失效,这就会导致要经常对维度表创建快照
- 维度表最好不要是Hive视图(View),因为每次都需要将视图进行物化,从而导致额外的时间开销
事实表优化
- 移除不参与Cube构建的字段,可以提升构建的速度,降低Cube构建结果的大小
- 尽可能将事实表进行维度拆分,提取公用的维度
- 保证维度与事实表的映射关系,过滤无法映射的记录
创建Cube(按日期)
核心步骤
DataSource => Model => Cube
- Model:描述了一个星型模式的数据结构,定义事实表(FactTable)和维度表(LookUpTable),以及它们之间的关系
- 基于一个Model可以创建多个Cube,可以减少重复工作
Cube设计
- 维度:日期
- 度量:订单商品销售量、销售总金额
sql
select date1, sum(price), sum(amount)
from dw_sales
group by date1;
结构图如下:
执行步骤
- 创建项目Project(非必须)
- 创建数据源(DataSource),指定有哪些数据需要进行数据分析
- 创建模型(Model),指定具体要对哪个事实表、维度表进行数据分析
- 创建立方体(Cube),指定对哪个数据模型执行预处理,生成不同维度的数据
- 执行构建 等待构建完成
- 再执行SQL查询,获取结果,从Cube中查询结果。
操作步骤
创建项目(Project)
左上角有一个 Add Project
我们点击之后弹窗,随便填写信息,创建
创建数据源(DataSource)
此时页面来到这里:
- 选择:DataSource面板
- 点击蓝色的小按钮:Load Table From Tree
点击左侧的数据库:wzk_kylin,选择之后,展开了树:
- wzk_kylin.dim_channel 点击
- wzk_kylin.dim_product 点击
- wzk_kylin.dim_region 点击
- wzk_kylin.dim_sales 点击
可以看到选中的都成蓝色了,记着点击 SYNC 按钮。
创建模型(Model)
切换到 Models 面板,点击New按钮,选择 New Model:
指定模型名称:
选择事实表,选择 WZK_KYLIN.DW_SALES:
选择维度,Columns这里段 DATE1:
选择度量,Columns选择 AMOUNT和PRICE:
指定分区和过滤条件,不修改:
完毕之后,可以看到左侧多了一个:(刚才名字改了一下):
创建立方体(Cube)
新建Cube
选择数据模型,同时设置一个Cube的名字:
选择 Add Dimensions 指定维度:
指定度量:
- _COUNT_是系统缺省参数给的。
- 新增 column叫 total_money 选择 DW_SALES.PRICE
- 新增 column叫 total_amount 选择 DW_SALES.AMOUNT
图片1
图片2
指定刷新设置:(默认的没改)
高级设置,找到Cube Engine的部分,选择 MapReduce:
后边的都默认就行,最后保存Save之后,可以看到如下的页面:
选择后面的Actions的Build:
进入Monitor页面可以看到任务的进度,可视化的,刷新页面可以看到数据在变,但是我性能太差了,需要等好长时间:
等了好久好久··· 终于执行完毕了:
执行SQL
进入 Insight 选项卡中,执行下面的SQL进行查询:
sql
select
date1,
sum(price) as total_money,
sum(amount) as total_amount
from dw_sales
group by date1;
运行出来的结果是: