大数据之Hive(一)

数据仓库

  1. 基本概念
    数据仓库(DW)【Data Warehouse】的基本目的是面向分析的集成化数据环境,为企业决策提供支持,出于分析和提供支持而创建的数据仓库。其本身不生产任何数据,也不需要消耗任何数据,数据来源于外部,数据也开放给外部使用。
  2. 基本特征
    其是面向主题的、非易失的、集成的、时变的数据集合。
  3. DW与RDBMS的区别
        DW主要是面向主题设计的,用于联机分析处理(OLAP【On-Line Analytical Processing】)用以存储历史数据,处理数据时实时性要求不高,目的是为了进一步挖掘这些数据的资源、为企业决策提供支持。
        RDBMS主要是面向事务设计的,用于联机事务处理(OLTP【On-Line Transaction Processing】)用以存储业务数据,处理数据时实时性要求很高,其目的是为了捕获数据资源。
        因此对于两者来说,他们更像是互补的关系而不是替代的关系。
  4. 分层架构
    数据仓库一般可分为:源数据层(ODS)、数据仓库层(DW)、数据应用层(DA),当然还有一些其它的分法,每个企业的所要分析的主题不一样,相应的分层架构也有所区别。

Hive

  • Hive是基于Hadoop的一个数据仓库工具,其本质就是将HQL(Hive SQL)转义成MapReduce任务,从而提供快速开发的能力,减少开发人员的学习成本。
  • Hive只适合用来做离线数据统计分析,不适合做OLTP的任务(不支持事务)。
  • Hive的查询需要启动MapReduce任务,运行时间较长。
  • Hive的数据类型
类型名称描述举例
booleantrue/falsetrue
tinyint1字节的有符号整数1
smallint2字节的有符号整数1
int4字节的有符号整数1
bigint8字节的有符号整数1
float4字节的单精度浮点数1.0
double8字节的单精度浮点数1.0
string字符串(长度不限)“abcd”
varchar字符串(1-66355),超长截断“abcd”
timestamp时间戳(10位)1601265027
date日期(格式yyyyMMdd)20200928
array字段类型相同的一组有序数据,可通过下标访问Arry(1,2,3)
map一组无序的键值对,可通过Map[key]获取valueMap(‘a’:‘b’,‘c’:‘d’)
struct一组命名的字段,字段类型可不同,可通过struct.字段获取数据struct{“a”,1,“b”,2}
  • Hive SQL之DDL
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 分区
[CLUSTERED BY (col_name, col_name, ...) 分桶
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format]  row format delimited fields terminated by “分隔符”
[STORED AS file_format] 
[LOCATION hdfs_path]

CREATE TABLE		创建一个指定名字的表
EXTERNAL       		创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),
					指定表的数据保存在哪里
COMMENT       		为表和列添加注释
PARTITIONED BY      创建分区表
CLUSTERED BY        创建分桶表
SORTED BY   	    按照字段排序(一般不常用)
ROW FORMAT    	    指定每一行中字段的分隔符
row format delimited fields terminated by ‘\t’
STORED AS   	    指定存储文件类型
	常用的存储文件类型:SEQUENCEFILE(二进制序列文件),
				  	 TEXTFILE(文本),
					 ORCFILE(列式存储格式文件).
    如果文件数据是纯文本,可以使用STORED AS TEXTFILE,如果数据需要压缩,使用 STORED AS SEQUENCEFILE
LOCATION  		    指定表在HDFS上的存储位置
  • 内部表、外部表、分区表、分桶表
    内部表:创建时不使用external,删除时表的元数据和真实数据都删除了,如果仅自己使用可以创建内部表,如果需要和别人共用,那就需要创建外部表(一般在DW层)了。
    外部表:创建时使用exernal,删除时仅删除元数据,一般在ODS层。
    分区表:其实分区表和表是内部表还是外部表无关,换句话说,就是无论是内部表还是外部表,都能创建成分区表,之所以放到此,是为了加以区分。分区表的目的是为了过滤数据,加快程序的运行速度,其手段就是分治,数据分区就是根据不同的需求,把数据通过一定得手段(比如hash、日期、类别等)存储到不同的目录,当需要是只读取此目录即可获取所有需要计算的数据,通过这种手段,大大减少了其他数据,因此,通过分区可以加快程序的运行速度和查询数据。
    分桶表:数据按照某列的hash值,对桶个数取模,然后把数据放到对应的桶中,可以认为分桶是对数据进一步的细粒度的划分。其目的也是为了提高查询效率或者取样更高效,
    内部表和外部表可以通过修改Hive表属性 EXTERNAL(true/false)来进行转换。

  • Hive数据导入导出

    导入:local虚机本地
    (1)、load data [local] inpath ‘dataPath’ overwrite into table student [partition (partcol1=val1,…)];
    (2)、create table score6 as select * from tableName;
    (3)、内部表,import table tableName from ‘dataPath’
    导出:local虚机本地
    (1)、insert overwrite [local] directory ‘dataPath’ row format delimited fields terminated by ‘,’ select * from tableName;
    (2)、内部表,export table tableName to ‘dataPath’;

  • 动态分区、静态分区

    静态分区:加载数据到Hive表中时,需要开发人员指定分区字段的值。
    动态分区:加载数据到Hive表中时,不需要开发人员指定分区字段的值,但是需要设置Hive属性hive.exec.dynamic.partition=true,开启分区功能。另外需要设置Hive为非严格模式hive.exec.dynamic.partition.mode=nonstrict。

  • Hive 排序
    Order By:全局有序,只有一个Reduce。
    Sort By: 每个Reduce内部有序,全局不一定有序。
    Distribute By:分区排序,Map端采用Hash算法,把查询结果Hash相同的值发到对应的Reduce中。可以和Sort By连用。即可以求取分组的TopN,先以Distribute By分区,然后Sort By求N,Distribute By需要在Sort By之前。
    Cluster By:Distribute By column + Sort By column ,如果column相同,可用Cluster By替换。

  • Hive其它
    Inner Join – 只支持等值连接(A.id=B.id),不支持不等值连接(A.id <=> B.id)
    其它用法遵循SQL规范,比如Having,Where,AS 等。建议Hive表连接查询使用别名,可以提高效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值