Kylin入门实战(数据源添加 + Model定义 + Cube构建 + 结果查询 + 查询限制)

news2024/12/27 0:16:01

目录

  • 1. 入门实战目的
  • 2. Hive源数据准备
  • 3. 创建project并添加Hive数据源
  • 4. 定义model
  • 5. 定义Cube
  • 6. 构建cube
  • 7. 查询cube构建后的结果
  • 8. 查询限制

1. 入门实战目的

实现从不同的维度统计员工的工资,例如从岗位类型、员工年龄、部门等不同维度,进行多维度的工资查询

2. Hive源数据准备

创建数据库

0: jdbc:hive2://kylin1:10000> create database kylin_test;
0: jdbc:hive2://kylin1:10000> use kylin_test;

创建员工表和部门表

0: jdbc:hive2://kylin1:10000> create external table if not exists employee(
emp_no int comment '员工ID',
emp_name string comment '员工姓名',
job string comment '岗位名称',
birthday string comment '员工生日',
salary double comment '薪水', 
reward double comment '奖金',
depart_no int comment '部门ID'
) row format delimited fields terminated by '\t';
0: jdbc:hive2://kylin1:10000>
0: jdbc:hive2://kylin1:10000> create external table if not exists department(
depart_no int comment '部门ID',
depart_name string comment '部门名称',
city string comment '城市'
) row format delimited fields terminated by '\t';
0: jdbc:hive2://kylin1:10000>

查看源数据文件

[root@kylin1 ~]# cat employee.txt 
1	emp_name_1	大数据工程师	2000-01-01	13000	400	1
2	emp_name_2	大数据工程师	2000-01-01	13000	400	1
3	emp_name_3	大数据工程师	2000-01-01	13000	400	1
4	emp_name_4	大数据工程师	2000-01-01	13000	400	1
5	emp_name_5	大数据工程师	2000-01-01	13000	400	1
6	emp_name_6	Java工程师	2001-01-01	12000	300	2
7	emp_name_7	Java工程师	2001-01-01	12000	300	2
8	emp_name_8	Java工程师	2001-01-01	12000	300	2
9	emp_name_9	Java工程师	2001-01-01	12000	300	2
10	emp_name_10	Java工程师	2001-01-01	12000	300	2
11	emp_name_11	前端工程师	2002-01-01	11000	200	3
12	emp_name_12	前端工程师	2002-01-01	11000	200	3
13	emp_name_13	前端工程师	2002-01-01	11000	200	3
14	emp_name_14	前端工程师	2002-01-01	11000	200	3
15	emp_name_15	前端工程师	2002-01-01	11000	200	3
16	emp_name_16	产品经理	2003-01-01	10000	100	4
17	emp_name_17	产品经理	2003-01-01	10000	100	4
18	emp_name_18	产品经理	2003-01-01	10000	100	4
19	emp_name_19	产品经理	2003-01-01	10000	100	4
20	emp_name_20	产品经理	2003-01-01	10000	100	4
[root@kylin1 ~]# 
[root@kylin1 ~]# cat department.txt 
1	数据部	北京
2	后端部	北京
3	前端部	上海
4	产品部	上海
[root@kylin1 ~]# 

导入源数据到Hive

0: jdbc:hive2://kylin1:10000> load data local inpath '/root/employee.txt' into table employee;
0: jdbc:hive2://kylin1:10000> load data local inpath '/root/department.txt' into table department;

3. 创建project并添加Hive数据源

创建project
创建project
添加数据源

这里有三种添加kylin数据源的方式:

  • 手动输入想添加的Hive表,格式为:db1.tb1,db2.tb2
  • 从hive数据库表结构中,选择需要添加的数据源
  • 上传CSV文件,并选择第一行是否是表头、每列的分隔符,再输入一个虚拟的数据库和表名,比如:db1.tb1

这里我们选择第二种。将选择的数据源信息元数据同步到mysql

同步Hive表元数据到mysql

4. 定义model

新建model
新建model第一步:定义model信息
model信息
第二步:定义model的表
选择事实表
选择维度表说明:

  • 如果维度表太大,比如大于300MB,则不要对该维度表进行snapshot。导致不能直接查询该维度表,和不能从该维度表定义Cube的衍生维度字段
  • 两个表的join字段类型必须一致

再点击Next,进入下一步

第三步:选择model的维度字段

选择维度字段
第四步:选择model的度量字段
选择度量字段
第五步:model的分区和条件过滤设置

分区和条件过滤设置
由于我们的Hive测试表不是分区表,所以不用定义事实表的分区字段信息,进行的是全量数据构建。生产环境需要定义实时表的分区字段信息,进行增量数据构建。维度表只能进行全量数据构建

最后点击Save进行保存

5. 定义Cube

新建cube
新建cube
第一步:定义cube信息

定义cube信息由于我们部署Kylin的时候,没有配置Email报警,所以这里不用进行设置

第二步:选择cube计算的维度

点击Add Dimensions,然后选择cube计算的维度,再点击OK,再点击Next进入下一步

选择cube计算的维度从model中定义的维度中进行选择,这里选择的维度个数会影响cuboid的个数

这里DEPART_NAME字段定义的维度类型为衍生维度

衍生维度的作用说明:假如我们在维度表选择了DEPART_NAME、CITY这两个维度,维度类型为正常维度,就会产生2的N次方 - 1,共3个维度。但是如果是衍生维度,这两个字段都可以通过DEPART_NO推导出来,则共有1个维度,减少了cuboid的个数

第三步:定义cube的度量计算字段

点击 + Measure,然后定义cube的度量计算字段,再点击OK,再点击Next进入下一步

定义cube的度量计算字段从model中定义的度量字段中进行选择

第四步:动态更新设置,这里保持默认就好了,点击Next进入下一步

动态更新设置这里的自动合并设置,值为7天和28天。含义是:我们每天对cube进行增量构建,每天的segment都会产生一个parquet文件,每过7天合并最近7天的parquet文件成一个小文件,每过28天合并最近的3个小文件和最近7天的parquet文件,合并成一个大文件

第五步:高级设置,这里保持默认就好了,点击Next进入下一步

高级设置Cube的构建Engine默认就是Spark

第六步:配置覆盖,这里保持默认就好了,点击Next进入下一步

配置覆盖
最后点击Save保存就可以了

cube详细信息查看cube详细信息查看可以看到如下信息:

  • Grid:cube定义时,各步骤的信息
  • SQL:查看cube构建时运行的SQL
  • JSON(Cube):生成的json格式的cube元数据信息
  • Owner:cube所属的kylin用户
  • Storage:构建完成后的cube,所占的磁盘信息

6. 构建cube

构建cube
构建cube查看构建状态

查看构建状态

点击小箭头图表,查看构建的详细信息,构建过程总共分两步,可以查看每步的构建日志,第二步还可以跳转到spark application的页面

查看spark的页面,提交application运行完成

application完成

7. 查询cube构建后的结果

输入SQL,查询cube构建后的结果:

查询cube构建后的结果点击Submit之后,会在Spark启动一个一直运行的Spark(Sparder)任务,用于对后续所有的查询提供服务

Sparder

查询的结果如下:

查询结果

8. 查询限制

我们这里没有做查询下压,所以查询有很多限制,如下所示:

  • model构建时,两表关联是inner join,查询的时候只能是inner join,其它类型的join(如left join)会报错
  • 查询时表做join关联,必须事实表在前,维度表在后
  • group by的维度字段,只能是cube定义时选择的字段,和join关联字段,其它字段会报错
  • 聚合计算的值,只能选择cube定义的度量值。比如cube定义了count(1)、sum(salary),则只能计算count、sum(salary)、avg(salary),不能计算max(salary)、sum(reward)等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode每日一题】【2023/1/30】1669. 合并两个链表

文章目录1669. 合并两个链表方法1:模拟1669. 合并两个链表 LeetCode: 1669. 合并两个链表 中等\color{#FFB800}{中等}中等 给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。 请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0…

亚信科技通信、交通行业数据库项目入选“星河”标杆、优秀案例

近日,由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织的第六届大数据“星河”案例评选结果公示,亚信科技及旗下亚信安慧支持完成的中国移动通信集团上海有限公司“业务支撑系统核心数据库…

Day 17 springboot 监听机制

1 Java 监听机制springboot监听机制,其实是对java提供的事件监听机制的封装。Java中的事件监听机制定义了以下几个角色:事件:Event,继承EventObject类,例如点击,拖动等等。事件源:Source&#x…

Python 正确重写运算符(重载)

运算符重载的作用是让用户定义的对象使用中缀运算符(如和|)和一元运算符(如-和~)。在Python中,这些也算是运算符:函数调用:()属性访问:.元素访问和切片:[]运算符重载基础…

RabbitMQ消息转换器

文章目录RabbitMQ消息转换器RabbitMQ消息转换器 在SpringAMQP的发送方法中,发送消息和接受消息的类型都是Object,也就是说,我们可以发送任意对象类型的消息,SpringAMQP都会帮我们把发送的消息序列化为字节后再进行发送。下面&…

剑指 Offer 第 16 天 把数组排成最小的数 扑克牌中的顺子

目录 面试题45. 把数组排成最小的数 面试题61. 扑克牌中的顺子 面试题45. 把数组排成最小的数 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输…

会声会影2023最新版v25.3.0.0视频剪辑软件

各位新年好呀,2022年的经历让我们更加成长,我们也终于迎来了新的一年。在这里,COCO玛奇朵先祝大家新年快乐,万事如意! 会声会影是一款操作简单易学的视频剪辑软件,会声会影的编辑步骤是流程化的&#xff0…

lamp的简单搭建 小白笔记

笔记是观看哔哩哔哩视频所写。链接如下:经典LAMP架构-跟着老王学Linux_哔哩哔哩_bilibili笔记有多处不妥之处,本是自己写笔记加深印象,仅供参考。所用linux系统是CentOS7。注意:该笔记操作后的网站仅主机内的局域网可以访问&#…

【数学建模】常用算法-线性回归Python实现

1 前言 本文主要讲解基于线性回归的糖尿病预测的python实现,后续会进行进一步的更新 2 代码实现 2.1 数据准备 导入相关的包 import numpy as np import pandas as pd加载数据集 这个数据集是sklearn.datasets自带的糖尿病数据集(diabetes&#xff…

I.MX6ULL内核开发2:内核模块实验2

目录 一、模块参数 二、符号共享 三、模块自动卸载 四、关于Makefile的说明 一、模块参数 根据不同应用场合给内核模块传递不同的参数,提高内核模块灵活性 定义一个常见变量使用module_param宏把传参值赋给变量module_param(name,type,perm) name: 参数名type…

uniapp弹幕

效果图 barrage.vue <template><view class"l-barrage"><block v-for"(item,index) in items" :key"index"><view v-if"item.display" class"aon" :style"{top: ${item.top}rpx}"><…

数据库丨记录一次TiDB v5.2.3迁移到v6.1.0的实操过程

文章目录前言一、环境简介二、迁移前提条件三、迁移方案四、迁移过程总结前言 TiDB 是一款结合了传统的关系型数据库和 NoSQL 数据库特性的新型分布式数据库。是第一个把数据分布在全球范围内的系统&#xff0c;并且支持外部一致性的分布式事务。 TiDB 具备强一致性和高可用性…

Struts2之注解

Struts2之注解1、引入依赖2、注解结构3、注解的使用1、引入依赖 Struts2中可以使用注解来代表struts.xml中的某些配置&#xff0c;可以简化配置。要使用注解&#xff0c;必须引入额外的依赖&#xff0c;如下&#xff1a; <!-- struts2注解依赖 --><dependency><…

未经风雨,怎见彩虹!回首2022,你好2023,新的一年,点面科技与您一起大展宏“兔”,扬眉“兔”气!

时光飞逝&#xff0c;转眼间2022虎年即将变成昨天的记忆。2022年&#xff0c;对于整个行业而言都是不寻常的一年&#xff0c;我们砥砺艰辛&#xff0c;着实经历着一场“寒冬”。但是&#xff0c;2022年注定也是不平凡的一年&#xff0c;在这个变中有定、变中求新的市场格局下&a…

【Rust】11. 泛型、Trait 和生命周期

11.1 泛型数据类型 11.1.1 函数的泛型 注意&#xff1a;泛型的比较适用于实现了 std::cmp::PartialOrd trait 的数据类型 11.1.2 结构体的泛型 结构体的泛型可以使用多个泛型类型参数 11.1.3 枚举的泛型 类似于结构体&#xff0c;枚举的泛型也可以使用多个泛型类型参数 11.…

Android 动画

在App中合理地使用动画能够获得友好愉悦的用户体验&#xff0c;Android中的动画有View动画、属性动画、帧动画、布局动画、转场动画等&#xff0c;在5.x以后有又新增了矢量动画&#xff0c;这些动画在平常开发中使用较为普遍&#xff0c;所以有必要做一次完整的总结。一、View动…

130道python练习题 完整版PDF

今天跟大家分享一些干货&#xff0c;在学python的朋友可以动起来了&#xff01; python基础知识练习题&#xff0c;常见常用的&#xff0c;可以作为参考&#xff0c;挺不错的&#xff0c;也有许许多多的讲解&#xff0c;适合python巩固基础知识和入门 130道练习题&#xff0c…

电脑网速慢怎么解决?提升网速真的很容易!

我们经常会使用电脑&#xff0c;如果加载网页的时间过长&#xff0c;或者是出现未响应的提示等问题&#xff0c;会非常影响我们使用电脑的观感。 针对这种问题&#xff0c;电脑网速慢怎么解决&#xff1f;来看看下面造成电脑网速慢的主要原因&#xff0c;以及我们该怎么提升电…

Python父类方法重写

在 Python 中&#xff0c;子类继承了父类&#xff0c;那么子类就拥有了父类所有的类属性和类方法。通常情况下&#xff0c;子类会在此基础上&#xff0c;扩展一些新的类属性和类方法。但凡事都有例外&#xff0c;我们可能会遇到这样一种情况&#xff0c;即子类从父类继承得来的…

vue前框框架课程笔记(六)

目录单文件组件.vue文件单文件组件常用结构App.vueStudent.vueSchool.vuemain.jsindex.html运行结果vue脚手架具体步骤项目架构其他配置项props配置项mixin混入插件scoped属性本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目…