赞
踩
问题:公司的经营状况? 主题一:财务 现金流 指标1.1:净现金流入/流出量 指标1.2:现金转换周期 预算执行状况 指标2.1:预算内成本控制 指标2.2:预算与实际支出的差异 主题二:产品 指标1:产品销售量 指标2:产品利润率 指标3:新产品开发周期 主题三:客户 老客户的流失率 指标1.1:重复购买率 指标1.2:客户满意度调查结果 新客户的留存率、转化率 指标2.1:新客户留存率 指标2.2:潜在客户到实际客户的转化率 主题四:员工 指标1:员工满意度 指标2:员工流失率 指标3:员工绩效评估 主题五:资产 指标1:资产负债率 指标2:固定资产周转率 指标3:存货周转率
问题 => 主题(拆分) => 指标 => HQL
基于元数据和表数据对数据进行结构化治理的机制(数仓)
"基于元数据"的核心:获取Hive MetaStore指定Mysql存储的元数据并根据其解析HQL生成执行计划
"基于表数据"的核心:获取表数据并通过执行计划进行数据处理和结果存储和加载。
UI
:客户端提交查询。
Compiler
:借助MetaStore获取存储在Mysql中的元数据信息解析查询块或表达式,生成执行计划。
Execution engine
:管理计划的不同阶段之间的依赖关系(协调各操作的执行顺序),并在适当的大数据组件上执行这些阶段。
6.1步:
1.将执行计划提交到Hadoop作为一个MapReduce作业.
2.RM将作业分解为多个任务,并且分配给不同的集群节点去执行。
3.启动Map任务(读取输入数据,处理,输出结果)
4.启动Reduce任务(可选)(读取Map|Shffle端输出,处理,输出结果) => 决定了是MapOnly引擎还是MapReduce引擎
6.2步:
完成了一个Job,将数据加载到Hive表上。
6.3步:
Hive与HDFS进行交互,包括读取数据文件以进行查询,或将查询结果写入到HDFS。
7,8,9步:
一旦执行引擎完成了查询任务,结果需要被传回UI
体现了将查询结果有执行引擎处理并通过Hive驱动程序返回给用户界面的过程。
将数据从各种数据源中提取出来,经过一系列处理和转换,最后导入到Hive委托存储的地方(例如:HDFS,Mysql等)
Extract 从外部数据源读取不同数据格式(结构化,半结构化,非结构化)数据通过UI提交到Hive系统 如何从关系型数据库处拉取数据到近源层,使用JDBC技术写SQL语句: `SELECT 字段列表 FROM A JOIN B JOIN C WHERE ...` 对于非关系型数据或其它格式的数据需要考虑其他方案。 Transform(+宽表) 列裁剪:使用 INSERT INTO ... SELECT 语句创建新表或视图。 数据清洗:移除无用或错误数据。 数据补全:修正残缺或错误数据。如 mlae 视为 male。 province city 数据变形:改变数据的格式。如 {province:Jiangsu, city:wuxi} 转为 Jiangsu | wuxi。 无法修正错误:删除记录或视为缺失后估算。如年龄 -3。 数据集大小对处理要求的影响 大数据集:尽量近似和估算 小数据集:尽量补全 Load 1. 将数据从DM层或者直接从源头加载到HDFS中。 2. 将物理计划传递给执行引擎,如MapReduce。 3. 获取处理后的结果或将处理后的结果写入HDFS。 ODS 近源层(`外部表`) Extract后提取到的保持原始格式的数据被提取到ODS层,并在ODS层内经过一定的清洗和结构化。 DWD 明细层(`内部表`) 表合并(列),行不变 时间维度表 订单表 => pro_dwd.order_detail_by_date 订单详情表 省份表 城市表 店铺表 => pro_dwd.order_detail_by_add_shop 订单表 订单详情表 DWT 轻聚层 1.实现聚合操作 聚合操作包括对多个指标(如销售额、用户数等)在多个维度(如时间、地区、产品类别等)上进行统计汇总。 2.提取聚合需求共性 DWS 汇总层 指标对应的结果数据 DM 数据集市 涉及权限管理和权限申请,不同人看到不同权限的数据,也可以申请查看某份数据的权限。 ## 如何理解在ODS上创建的是外部表,在DWD上创建的是内部表。 外部表的数据实际存储在外部系统(如HDFS)上,内部表的数据存储是由Hive管理的。 这是因为ODS层存储的原始数据还可能被其他应用所使用,而DWD层存储的经过转换、清洗和集成的数据专属于Hive。 关于"层"的概念: 1. "层"是逻辑概念,表示一个数据处理|存储环节,实际上存储在不同的服务器中。 2. "层"是基于数仓的概念,不依赖于任何引擎。
库、表的存储位置:
/user/hive/warehouse
【即配置hive.metastore.warehouse.dir
的文件夹路径地址】
默认数据库default | 非default数据库 | |
---|---|---|
数据库位置 | /user/hive/warehouse/数据库名字.db | |
表位置 | /user/hive/warehouse/表名 | /user/hive/warehouse/数据库名字.db/表名 |
数据的存储位置:
服务
Hive MetaStore:指定Derby|Mysql存储元数据信息,并与HDFS相关联。
开放API面向客户端供它们访问元数据信息。
存储
database_params:存放元数据参数配置
dbs:存放metadata元数据
内部表:hive_+含义
外部表:hive_ext_+含义
CTE|TEMPORARY TABLE|VIEW:含义|hive_tmp_+含义|hive_view_+含义
分区表|分桶表:hive_par_+含义
A.区别
内部表
1.HDFS中的数据由Hive管理,在Hive中删除表会同步删除数据。
2.在Hive中创建内部表之后,在HDFS中会自动创建内部映射路径:/hive312/warehouse/DB_NAME.db/TABLE_NAME
3.内部表在创建的时候,通常路径中还没有数据。
外部表
1.HDFS中的数据不由Hive管理,在Hive中删除表不会同步删除数据,要删数据必须去HDFS中手动删除。
2.在Hive中创建外部表之后,在HDFS中不会有内部映射路径,需要自行创建并指定location。(location为数据文件的上一级目录)
3.外部表在创建的时候,通常路径中已有数据。
B.选择
只在Hive中使用;频繁更新数据并希望这些操作自动管理 —— 内部表
数据由多个应用共享,例如Hive和Spark;数据不经常变化或数据更新由外部过程管理 —— 外部表
分区字段名=分区字段值
基于一个或多个分区键进行分区,通常以日期进行分区。
分区表为内部表。
分区字段可以是原始表中的字段,也可以是通过表中的一个或多个字段计算出来的表达式。(日期 -> 年)。
若非原始字段,其本身也可以作为原始字段使用所有的SQL语句。
1.WHERE … | ON …
2.GROUP BY … , DISTRIBUTE BY … (确定Reducer) , cluster by …(确定Reducer并在内部排序)
3.如果数据量大,由于分区本身(文件夹)的大小限制,会选择缩小分区字段的维度。
1.静态分区(eg:客户按分区给数据)
需要为每个加载的数据集指定一个具体的分区(分区字段名=字段值)
适用于持续增长的新数据,例如对按月分区的数据,每个月增加一次分区即可。
2.动态分区(eg:项目初期,客户一次性给了大量数据)
适合处理包含大量分区的情况
1.hive进行查询时就是文件流读文件,即使读一条数据也需要加载整个文件。
所以分区表将文件切割成更小的粒度,当需要针对局部数据进行检索、聚合等处理时,便于快速筛选出符合特定条件的数据,提高效率。
2.如果需要进行分组聚合的字段是分组字段,即直接对该分区作聚合,则直接设置combiner,无需设置reducer。
GROUP BY year(order_time),month(order_time),weekofmonth(order_time)
=>从左到右分区从主到次
一级分区(year=2012)
二级分区(month=3)
三级分区(weekofmonth=2)
选择桶中的一个或多个列作为桶的依据,根据这些列的值对数据进行散列,然后根据散列值将数据分配到不同的桶中。
分桶的字段必须是表中已存在的字段,分桶数通常为2^n
默认采用原始字段值的hashcode%分桶数来决定该行数据会被拆分到几个桶。
便于进行抽样,通过了解数据的分布状态来对数据进行全量分析。或者作为一部分数据集运行查询测试。
提升有join操作时的MR效率
主要由采样率决定 : 10% -> 桶数定义为10
数据量越大,分桶越多。分桶越多,并行度越高。
分区倾斜严重,分桶能缓解。
配置: 优先级 重要程度
set config_item=value; 临时配置 1 ✔✔✔(个性化 执行优化)
set hive.server2.logging.operation.level=verbose|NONE; 开启|关闭日志(声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/939582
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。