《商务智能原理与应用第二章数据仓库课件.ppt》由会员分享,可在线阅读,更多相关《商务智能原理与应用第二章数据仓库课件.ppt(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据仓库商务智能原理与应用-第二章前请回顾13524商务智能产生的背景商务智能的基本架构商务智能在一些行业中的实际应用商务智能的定义商务智能相关的技术目录01020304数据仓库概念ETL处理过程数据仓库模型数据仓库工具Hive01数据仓库概念什么是数据仓库?比尔恩门(BillInmon)数据仓库是一个面向主题的(SubjectOriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(TimeVariant)的数据集合,用于支持管理决策(DecisionMakingSupport)。数据仓库之父比尔恩门(Bill Inmon)定义数据仓库是一种存
2、储方案,不是具体的某个产品数据仓库用于支持决策,面向分析型数据处理数据仓库由企业中的多个异构数据源进行集成数据库是数据仓库的基础理解数据仓库的特点操作型数据库的数据组织面向事务处理任务,各个联机事物处理系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织。面向主题养老保险医疗保险财产保险汽车保险操作型应用程序顾客账户保险金索赔数据仓库主题数据仓库的特点数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。集成性不同的操作型系统之间的数据一般是相互独立、异构的,而数据
3、仓库中的数据是对分散的数据进行抽取、清理、转换和汇总后得到的,这个过程我称之为ETL处理过程,我们在下一章将会深入研究ETL过程。数据库1数据库2数据库3ETL处理数据仓库数据仓库的特点数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。数据相对稳定数据库实时更新,增删改操作多技术难点多数据仓库只需定期加载、刷新,删除和修改操作少查询要求高数据仓库的特点操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系
4、统记录了企业从过去某一时间点(如开始应用数据仓库的时间)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。反映历史变化1.数据仓库随时间变化不断增加新的数据内容。表现在3.数据仓库的数据时限一般要远远长于操作型数据的数据时限。2.操作型系统存储的是当前数据,而数据仓库存储的数据是历史数据。数据仓库的功能数据仓库的主要功能是对现有的数据进行分析整理,以利于各种分析方法如联机分析处理(OLAP)、数据挖掘(DataMining)的进行,为决策的拟定提供数据支持,帮助构建商务智能。数据仓库的结构数据仓库的基本架构主要包含的是数据流入流出的过程,可以分为三层源数据
5、、数据存储、数据应用。源数据点击流日志文档数据数据库数据其它数据存储聚合数据业务模型多维数据模型细节数据数据应用报表展示数据分析即席查询数据挖掘ETL数据库与数据仓库的区别数据库是数据仓库的基础,数据库是为了捕获数据而设计的,而数据仓库是为了分析数据而设计的,除此之外,数据库与数据仓库在其他方面也存在着一些差别。对比内容数据库数据仓库数据内容当前值历史的、存档的、归纳的、计算的数据数据目标面向业务操作程序,重复处理面向主题域、管理决策分析应用数据特性动态变化、按字段更新静态、不能直接更新、只定时添加数据结构高度结构化、复杂、适合操作计算简单、适合分析使用频率高中到低数据访问量每个事务只访问少量
6、记录有的事务可能要访问大量记录对响应时间的要求以秒为单位计量以秒、分钟,甚至小时为计量单位数据库与数据仓库的区别数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。数据内容数据库是为捕获数据而设计,面向业务操作程序,重复处理;数据仓库是为分析数据而设计,面向主题域、管理决策分析应用。数据目标数据库主要由原子事物组成,数据更新频繁,需要并行控制和恢复机制。而数据仓库往往处理的是复杂的数据查询,大部分是只读操作,不能直接更新、只定时添加。数据特性数据库与数据仓库的区别数据库存储的是联机事务处理的操作数据,通常联机事务处理每时每刻都在进行着对数据的读写,对数据的使用频率较高。而数据仓库是为分析
7、型系统提供数据支持,一般是企业管理层或者决策者需要,使用频率较低。使用频率数据库中的建模一般遵循三范式,是高度结构化、复杂、适合操作计算的数据,而数据仓库的建模有特定的方式,一般采用维度建模,数据结构比较简单,可以提高查询效率,适合统计分析。数据结构数据仓库中的数据通常来源于多个不同的联机事物处理系统数据库(存储多年的数据),数据量远远大于操作型数据库,一般作为企业数据中心用。数据规模数据库与数据仓库的区别数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。设计方式联机事务处理系统涉及频繁、简单的数据存取,因此对数据库的性能要求较高,需
8、要数据库在短时间内做出响应,而分析型系统对响应的时间要求不是那么苛刻,有的分析甚至可能需要几个小时。处理性能数据仓库与商务智能的关系数据仓库是一种技术,也是一种解决方案。对于企业来说,商务智能系统一般构建在数据仓库上。数据仓库是构建商务智能系统的基础。商务智能是数据仓库、联机分析处理和数据挖掘等相关技术走向商业应用后形成的一种应用技术,二者是一种包含关系。决策支持数据分析与挖掘数据仓库数据源02ETL处理过程什么是ETL异构数据库数据仓库抽取转换、清洗加载ETL(Extract-Transform-Load)是将联机事务处理系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的
9、分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。ETL是构建数据仓库的重要过程。ETL的实现方法ETL的实现有多种方法,常用的有三种:ETL工具实现、SQL方式实现、ETL工具结合SQL方式实现。实现方法优点缺点ETL工具速度快、难度低灵活度低、运行效率低SQL方式灵活度高、运行效率高编码复杂、技术要求高ETL工具+SQL开发速度和效率高数据抽取数据仓库是面向主题的,并非所有源数据库的数据都是有用的,因此在把数据库中的相关数据导入到数据仓库之前,需要先确定该数据库中哪些数据是与决策相关的。1.确定数据源的数据及其含义2.确定数据的抽取范围3.确定数据的抽取频率4.确定外部数据
10、的导入方式5.确定抽取异常的处理方式6.确定输出目的地和格式具体流程和主要工作:数据转换数据仓库的数据通常来源于多个异构的数据库,因此源数据在加载到数据仓库之前,需要对数据进行一定的数据转换,以保证数据的一致性。1.不一致数据的转换2.数据粒度的转换3.商务规则的计算数据转换数据清洗数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。数据的清洗是一个循环反复的过程。清洗重复的数据清洗错误的数据清洗不完整的数据数据加载数据转换、清洗结束后,需要把数据装载到数据仓库中,数据的装载有三种方式。数据装载初始装载增量装载完全刷新03数据
11、仓库模型什么是数据模型数据模型是现实世界数据特征的抽象,用于描述一组数据的概念和定义。数据模型是数据库中数据的存储方式,是数据库系统的基础。现实世界信息世界(概念模型)计算机世界(物理模型)抽象转换现实世界是指客观存在的事物及其相互间的联系。信息世界是人们把现实世界的信息和联系,通过“符号”记录下来,然后用规范化的数据库定义语言来定义描述而构成的一个抽象世界。现实世界计算机世界是将信息世界的内容数据化后的产物。信息世界计算机世界数据模型的结构数据模型所描述的内容包括三个部分:数据结构、数据操作、数据约束。数据结构数据操作数据约束数据模型主要描述数据的类型、内容、性质以及数据间的联系等,是目标类
12、型的集合。主要描述在相应的数据结构上的操作类型和操作方式。数据结构主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。数据操作数据约束数据模型的价值只有数据模型将数据有序的组织和存储起来之后,大数据才能得到高性能、低成本、高效率、高质量的使用,也是衡量数据模型价值的标准。良好的数据模型能帮助我们快速查询所需要的数据,减少数据的I/O吞吐,提高使用数据的效率。良好的数据模型能极大地减少不必要的数据冗余,也能实现计算结果复用,极大地降低存储和计算成本。性能良好的数据模型在业务或系统发生变化时,可以保持稳定或很容易地实现扩展,提高
13、数据稳定性和连续性。成本良好的数据模型能改善数据统计口径的不一致性,减少数据计算错误的可能性。效率质量数据模型的分类目前成熟地应用在数据库系统中的数据模型主要有三种:层次模型、网状模型和关系模型。网状模型关系模型层次模型层次模型用树形结构表示实体之间联系的模型叫层次模型,树中每一个节点代表一个记录类型,树状结构表示实体型之间的联系。层次模型的特征是:有且仅有一个结点没有父结点,它就是根结点;其他结点有且仅有一个父结点。学校文学外语数学计算机软件工程网络工程应用数学英语网状模型用网络结构表示实体类型及其实体之间联系的模型,网状模型是一种可以灵活地描述事物及其之间关系的数据库模型。网状模型的特征:
14、允许结点有多于一个父结点;可以有一个以上的结点没有父结点。课程专业系教研室学生教师任课选课关系模型关系模型以二维表结构来表示实体与实体之间的联系,它是以关系数学理论为基础的。关系模型的数据结构是一个“二维表框架”组成的集合。学生编号姓名性别所在院系11001刘振杰男计算机11002郭卫东男计算机11003宋爱梅女文学院11004贾燕青女商学院课程编号课程名学生编号上课教室21001高等数学11001一教20121002线性代数11002三教30421003大学英语11004三教40121004软件工程11001二教101学生信息表选课信息表数据仓库数据模型架构数据仓库的数据数据区域划分和数据仓
15、库的整体架构是紧密关联在一起的,整个数据仓库的数据区域分成5大部分,每个部分都有其独特的功能。数据仓库数据模型架构这部分是主要的数据仓库业务数据存储区,数据模型在这里确保数据的一致性。这部分主要存储数据仓库用于内部管理的元数据,数据模型在这里能够帮助进行统一的元数据的管理。系统记录域这部分数据来自于系统记录域的汇总,数据模型在这里保证了分析域的主题分析的性能,满足了部分的报表查询。内部管理域这部分数据模型主要用于各个业务部分的具体的主题业务分析。汇总域这部分数据模型主要用于相应前端的反馈数据,数据仓库可以根据业务的需要设置这一区域。分析域反馈域数据仓库的建模阶段划分数据仓库的数据建模按照时间的
16、先后顺序,可以大致分为四个阶段,依次为业务建模、领域概念建模、逻辑建模、物理建模。业务建模领域概念建模逻辑建模物理建模业务建模的主要工作1划分整个单位的业务,一般按照业务部门的划分,进行各个部分之间业务工作的界定,理清各业务部门之间的关系2深入了解各个业务部门的内具体业务流程并将其程序化3提出修改和改进业务部门工作流程的方法并程序化4数据建模的范围界定,整个数据仓库项目的目标和阶段划分领域概念建模的主要工作1抽取关键业务概念,并将之抽象化2将业务概念分组,按照业务主线聚合类似的分组概念3细化分组概念,理清分组概念内的业务流程并抽象化4理清分组概念之间的关联,形成完整的领域概念模型逻辑建模的主要
17、工作1业务概念实体化,并考虑其具体的属性2事件实体化,并考虑其属性内容3说明实体化,并考虑其属性内容物理建模的主要工作1针对特定物理化平台,做出相应的技术调整2针对模型的性能考虑,对特定平台作出相应的调整3针对管理的需要,结合特定的平台,做出相应的调整4生成最后的执行脚本,并对其完善建模方法目前业界较为流行的数据仓库的建模方法非常多,这里主要介绍范式建模法,维度建模法,实体建模法等几种方法,每种方法其实从本质上讲就是从不同的角度看业务中的问题。维度建模法实体建模法范式建模法范式建模法所有表中的数据都为原子数据,不可再分所有表中的所有字段都必须依赖主关键字第一范式(1NF)所有表中的非主关键词之
18、间不能函数依赖关系第二范式(2NF)第三范式(3NF)范式建模法是在构建数据模型常用的一个方法,主要利用技术层面上的方法解决关系型数据库的数据存储。在学习范式建模法之前,我们先来了解一下数据库三范式。范式建模的优缺点优点:从关系型数据库的角度出发,结合了联机事务处理系统的数据模型,能够比较方便的实现数据仓库的建模。缺点:由于建模方法限定在关系型数据库之上,在某些时候反而限制了整个数据仓库模型的灵活性,性能等。维度建模法事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性纬度表的
19、主键。维度表可以看作是用户来分析数据的窗口,纬度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构。事实表维度表维度建模法按照事实表,维度表来构建数据仓库,数据集市。这种方法的最被人广泛知晓的名字就是星型模式。星型模型以商品销售模型为例,销售表即为事实表,而其它描述性的表即为维度表,如时间维度,类别维度,属地维度等。这就是一个典型的星型模型。星型模型的优缺点针对各个维度作了大量的预处理,能够极大的提升数据仓库的处理能力维度建模非常直观,紧紧围绕着业务模型,可以直观的反映出业务模型中的
20、业务问题不需要经过特别的抽象处理,即可以完成维度建模优点由于在构建星型模式之前需要进行大量的数据预处理,因此会导致大量的数据处理工作当业务发生变化,需要重新进行维度的定义时,往往需要重新进行维度数据的预处理不能保证数据来源的一致性和准确性,在数据仓库的底层,不是特别适用于维度建模的方法缺点维度建模法的步骤维度模型设计的大致过程主要包括:选择业务流程,声明粒度,确认维度,确认事实。在各个阶段内容的设定都是通过考虑业务的需求以及协作建模会话中底层源数据的现实来确定的。选择业务流程声明粒度确认维度确认事实实体建模将任何一个业务过程划分成3个部分,实体,事件和说明就是我们实体建模的主要工作。主要指领域
21、模型中特定的概念主体,指发生业务关系的对象主要指概念主体之间完成一次业务流程的过程,特指特定的业务过程实体主要是针对实体和事件的特殊说明事件说明实体建模将整个业务也可以划分成一个个的实体,而每个实体之间的关系,以及针对这些关系的说明就是我们数据建模需要做的工作。实体实体说明事件小明学校开车上学实体建模的优缺点优点:能够很轻松的实现业务模型的划分,广泛应用于业务建模阶段和领域概念建模阶段。缺点:实体说明法只是一种抽象客观世界的方法,该建模方法只能局限在业务建模和领域概念建模阶段。社保业务背景目前我国家的社保主要分为养老,失业,工伤,生育,医疗保险和劳动力市场这六大块主要业务领域。社保失业医疗工伤
22、生育劳动力市场养老业务建模阶段划分出养老、医疗、失业、工伤、生育、劳动力市场五个部门,并考虑具体的业务主线内需要分析的业务主题。领域概念建模阶段运用了实体建模法,从纷繁的业务表象背后通过实体建模法,抽象出实体,事件,说明等抽象的实体,从而找出业务表象后抽象实体间的相互的关联性,保证了数据仓库数据按照数据模型所能达到的一致性和关联性。抽象过程的四个层次整个数据模型的核心方法,领域概念建模的实体的划分通过这种抽象方法来实现整个数据模型的核心部分,因为不同程度的抽象方法,决定了领域概念的不同抽象方法层主要是解决具体的业务问题领域概念层主要划分大的业务领域,一般在业务建模阶段即已经完成这方面的划分,通
23、过大的业务主线来划分整个业务模型大的框架具体业务层业务主线层逻辑建模阶段需要对“人”和“公司”等这些抽象实体进行实例化,需要考虑“人”的属性包括那些,例如“人”的年龄,性别,受教育程度等等主要考虑是“事件”这个抽象概念的实例化,例如:对于养老金征缴这个“事件”属性的考虑,对于失业劳动者培训这个“事件”属性的考虑等等实例化每一个抽象的实体主要是要针对“事件”进行完善的“说明”,例如:对于“事件”中的地域,事件等因素的考量等等找出抽象实体间的联系,并将其实例化找出抽象事件的关系,并对其进行说明通过领域概念建模之后,虽然模型的框架已经完成,但是还有很多细致的工作需要完成。物理建模阶段物理建模阶段是整
24、个数据建模的最后一个过程,这个过程其实是将前面的逻辑数据模型落地的一个过程。因为数据仓库平台的不同,具体的建模过程也会有些差异。1生成创建表的脚本。不同的数据仓库平台可能生成不同的脚本2针对不同的数据仓库平台,进行一些相应的优化工作3针对数据集市的需要,按照维度建模的方法,生成一些事实表,维度表等4针对数据仓库的ETL和元数据管理的需要,生成一些数据仓库维护的表04数据仓库工具HiveHadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce为海量的数据提供了计算。Ha
25、doop简介HDFSHBaseZookeeper分布式协调-HAMapReduceAmbariMahoutHiveSqoopPig数据分析引擎数据采集引擎Flume.机器学习算法库Hive是一个基于Hadoop的数据仓库工具,用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储。lHive是一个翻译器:SQL-Hive引擎-MapReduce程序lHive是构建在HDFS上的一个数据仓库(DataWarehouse)lHive支持SQL(部分支持,并非全部)Hive简介HiveHDFS表目录分区目录数据文件桶文件Hive体系结构主要包含用户接口,元数据存储,Hive驱动器,Hado
26、op集群这几个部分。Hive的体系结构Hive利用HDFS存储数据,利用MapReduce查询分析数据。Hive的工作原理Hive接口驱动程序driver编译器compiler元存储MetaStore执行引擎ExecutionEngineYARN(MapReduce)HDFS1102534787.169Hive的设计特点1支持索引,加快数据查询。2不同的存储类型,例如,纯文本文件、HBase中的文件3将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间4可以直接使用存储在Hadoop文件系统中的数据5内置大量可扩展的用户函数UDF来操作时间、字符串和其他的数据挖掘工具6类SQL
27、的查询方式,可将SQL查询转换为MapReduce任务在Hadoop上执行Hive在很多方面和传统数据库类似,但是其底层对HDFS和MapReduce的依赖意味着它的体系结构有别于传统数据库。Hive与传统数据库对比对比项传统数据库HiveSQL语句支持不完全支持事务支持不支持索引支持支持更新数据保存块设备、本地文件系统HDFS数据规模小大执行延迟低高多表插入不支持支持子查询完全支持只能用在From子句中视图可更新只读Hive的设计目标是,通过类SQL的语言实现在大规模数据集上快速的数据查询等操作,而不需要开发相应的MapReduce程序,所以Hive特别适合数据仓库的统计分析。Hive构建在
28、基于静态批处理的Hadoop之上,Hadoop通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销,因此Hive并不适合那些需要低延迟的应用。Hive的使用场景网络日志分析多维度数据分析海量结构化数据离线分析适合联机事务处理OLTP联机分析处理OLAP不适合Hive的内置数据类型分为两大类,一个是基本数据类型,另一个是集合数据类型。基础类型包括INT、BOOLEAN、FLOAT、DOUBLE、STRING、CHAR、VARCHAR、DATE等,集合类型包括ARRAY、MAP、STRUCT、UNION。Hive的数据类型数据类型长度例子TINYINT1byte有符号整数-12812720S
29、MALLINT2byte有符号整数-327683276720INT/INTEGER4byte有符号整数-2147483648214748364720BIGINT8byte有符号整数-9223372036854775808922337203685477580720BOOLEAN布尔类型true/falseTRUEFLOAT4byte单精度浮点数3.14DOUBLE8byte双精度浮点数3.14数据类型长度例子STRING字符序列 thank you,I am fineBINARY字节数组TIMESTAMP整数浮点数或字符串DECIMAL任意精度有符号小数decimal(3,1)3表数字长度,1表
30、数字长度。表示范围为99.9 99.9VARCHAR长度介于1和65355之间字符串 helloCHAR固定长度255的字符串 hello DATEYYYYMMDD日期格式 00000101 99991231 20130101Hive文件通常存储在HDFS上,存储格式也是Hadoop通用的数据格式,主要包含TEXTFILE、SequenceFile、RCFile、ORCFile、Parquet、Avro这几种格式的文件,当然也可以自定义文件类型。Hive的存储格式Hive存储格式TEXTFILESequenceFileRCFileORCFileParquetAvroHive为了更好支持大规模数
31、据分析,默认使用了几个很少出现在字段值中的控制字符,而不是逗号、制表符这类常用的分隔符。下表为Hive中默认的记录和字段分隔符。Hive文件的分隔符分隔符 描述n对于文本文件来说,每行都是一条记录,因此换行符可以分隔记录A(Ctrl+A)A(Ctrl+A)用于分隔字段(列)。在CREATETABLE语句中可以使用八进制编码001表示B用于分隔ARRAY或者STRUCT中的元素,或用于MAP中键-值对之间的分隔。在CREATETABLE语句中可以使用八进制编码002表示C用于MAP中键和值之间的分隔。在CREATETABLE语句中可以使用八进制编码003表示Hive的数据模型分为托管表、外部表、
32、分区表、桶表、视图。Hive的数据模型数据模型托管表外部表分区表桶表视图Hive托管表也称为内部表,它与数据库中的Table在概念上是类似,每一个Table在Hive中都有一个相应的目录存储数据,所有的Table数据都保存在这个目录中,删除表时,元数据与数据都会被删除。Hive的数据模型-托管表(内部表)l创建托管表可以直接使用SQL创建,语法与传统数据库类似,如:createtableemp(empnoint,enamestring);l默认的分隔符是tab制表符。l加载数据到托管表时,Hive把数据移到仓库目录,源文件会被删除。l删除一个托管表,它的元数据和数据,会被一起删除。外部表则指向
33、已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异,因为外部表加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除该链接。Hive的数据模型-外部表l创建外部表需要在SQL中添加“EXTERNAL”标识,表明它是外部表,如:createEXTERNALtableemp(empnoint,enamestring);l外部表可以创建Partition。l外部表加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。l删除外部表时,Hive不会碰数
34、据,只会删除元数据。在HiveSelect查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。分区表指的是在创建表时指定的partition的分区空间。Hive的数据模型-分区表l将数据组织成分区,可以提高数据的查询速度。l一个表可以拥有一个或者多个分区。l分区以文件夹的形式单独存在表文件夹的目录下。l分区是以字段的形式在表结构中存在。对于每一个表(table)或者分区,Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数
35、求余的方式决定该条记录存放在哪个桶当中。Hive的数据模型-桶表l组织成桶可以获得更高的查询处理效率。l组织成桶可以使取样(sampling)更高效。在Hive中,创建视图时并不把视图物化存储到磁盘上。相反,视图的SELECT语句中只是在执行引用视图的语句时才执行。Hive的数据模型-视图l创建视图时并不把视图物化存储到磁盘上。l视图的SELECT语句中只是在执行引用视图的语句时才执行。HiveQL是一种类似SQL的语言,它与大部分的SQL语法兼容,但是并不完全支持SQL标准,本节主要介绍Hive常用的HiveQL操作。HiveQL简介HiveQL交互语句建表语句修改语句导入语句插入语句删除语
36、句查询语句查看所有数据库名:showdatabases;查看所有表名:showtables;查看以ad开头的表名:showtablesad*;查看表结构(表名为emp):descemp;交互语句创建普通托管表:createtableemp_tg(idint,namestring);创建普通托管表,并指定文件分隔符:createtableemp_tg(idint,namestring)rowformatdelimitedfieldsterminatedbyt;创建外部表,同时指定文件路径:createexternaltableemp_wb(idint,namestring)location/em
37、p;创建分区表:createtableemp_fq(idint,namestring)partitionedby(citystring);创建桶表前,需要需要设置“hive.enforce.bucketing”属性为true,使Hive能够识别桶:sethive.enforce.bucketing=true;创建桶表:createtableemp_tb(idint,namestring)clusteredby(id)into3buckets;创建视图:createviewview_empasselectid,namefromemp_tg;建表语句修改表名:altertableemp_tgren
38、ametoemp_tg_new;增加新列:altertableemp_tg_newaddcolumns(addrstring);修改列名:altertableemp_tg_newchangecolumnaddraddressstring;修改语句本地数据导入:loaddatalocalinpath/home/hadoop/emp.txtoverwriteintotableemp;HDFS数据导入:loaddatainpath/scott/emp.csvintotableemp;导入语句插入一条数据:insertintoemp(id,name)values(1001,赵子龙);分区表中插入数据,
39、指明导入的数据的分区(通过子查询导入数据):insertintotableemp_fqpartition(city=beijing)selectempno,enamefromemp1wheredeptno=10;插入语句删除行:deletefromempwhereid=0;丢弃某个表:droptableemp_wb;删除视图:dropviewview_emp;删除分区:altertableemp_fqdroppartition(city=beijing);删除语句简单查询:selectid,namefromemp;子查询:selectid,name,cityfromempwherecity=b
40、eijing;内连接:selecttb1.*,tb2.*fromtb1jointb2on(tb1.id=tb2.userid);左连接:selecttb1.*,tb2.*fromtb1leftouterjointb2on(tb1.id=tb2.userid);右连接:selecttb1.*,tb2.*fromtb1rightouterjointb2on(tb1.id=tb2.userid);全连接:selecttb1.*,tb2.*fromtb1fullouterjointb2on(tb1.id=tb2.userid);半连接:selecttb1.*fromtb1leftsemijointb2on(tb1.id=tb2.userid);查询语句谢谢观看