Hive,
Hive中的表
1. 内部表:先在hive里建一张表,然后向这个表插入数据(用insert可以插入数据,也可以通过加载外部文件方式来插入数据),这样的表称之为hive的内部表。
2. 外部表:HDFS里已经有数据了,通过hive创建一张表来管理这个文件数据。这样的表称之为外部表。注意,hive外部表管理的是HDFS里的某一个目录下的文件数据。
1)创建外部表的命令:
create external table stu (id int,name string) row format delimited fields terminated by ’ | ’ location ‘/目录路径’;
3. 内部表和外部表的区别:
① 删除内部表,会删除元数据,并且在hdfs中表对应的文件夹及其中的数据也会被删除。
② 删除外部表时,只会删除元数据,在hdfs中的表对应的文件夹及其中的数据不会被删除。
4. 分区表:对数据进行分区可以提高查询时的效率。
1)普通表和分区表区别:有大量数据增加的需要建分区表
2)创建分区表:create table book (id bigint, name string) partitioned by (自定义的分区字段名(比如category) 字段属性(比如string)) row format delimited fields terminated by ‘\t’;
注意:在创建分区表时,partitioned字段可以不在字段列表中。生成的表中自动就会具有该字段。
5. 分桶表:分桶操作是更细粒度的分配方式,一张表可以同时分区和分桶。
1)分桶的原理:根据指定的列的计算hash值模余分桶数量后将数据分开存放。
2)分桶的主要作用:对于一个庞大的数据集我们经常需要拿出来一小部分作为样例,然后在样例上验证我们的查询,优化我们的程序。
Hive的内置函数
1. 数学函数
如 round()四舍五入、ceil()向上取整、floor()向下取整、sqrt()平方根、abs()绝对值等;(参数都为double)
2. 类型转换函数
cast(expr as );如果转换失败返回null
3. 日期函数
如:unix_timestamp()返回一个时间戳,从1970-01-01 00:00到现在时间的秒数
to_date(string timestamp)返回时间戳中的年月日
4. 条件函数
if(boolean testCondition, T valueTrue, T valueFalseOrNull)判断是否满足条件,如果满足返回一个值,如果不满足则返回另一个值。
5. 字符串函数
6. 聚合函数
7. collect_set 函数:用于数据去重,并将结果形成数组返回。
8. explode 函数:可以将行数据按指定规则切分出多行。
9. Hive的UDF:如果hive的内置函数不够用,我们也可以自己定义函数来使用,这样的函数称为hive的用户自定义函数,简称UDF。
实现步骤:
1)新建java工程,导入hive相关包,导入hive相关的lib。
2)创建类继承UDF
3)自己编写一个evaluate方法,返回值和参数任意。
Hive的文件存储格式
Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式,如TextFile,RCFile,SequenceFile,AVRO,ORC和Parquet格式。 在建表时使用STORED AS (TextFile | RCFile | SequenceFile | AVRO | ORC | Parquet)来指定存储格式。
1. TextFile:每一行都是一条记录,每行都以换行符(\ n)结尾。数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
2. SequenceFile:是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。
3. RCFile:是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。
4. AVRO:是开源项目,为Hadoop提供数据序列化和数据交换服务。您可以在Hadoop生态系统和以任何编程语言编写的程序之间交换数据。Avro是基于大数据Hadoop的应用程序中流行的文件格式之一。
5. ORC文件:代表了优化排柱状的文件格式。ORC文件格式提供了一种将数据存储在Hive表中的高效方法。这个文件系统实际上是为了克服其他Hive文件格式的限制而设计的。Hive从大型表读取,写入和处理数据时,使用ORC文件可以提高性能。
6. Parquet:是一个面向列的二进制文件格式。Parquet对于大型查询的类型是高效的。对于扫描特定表格中的特定列的查询,Parquet特别有用。Parquet支持使用压缩Snappy,gzip,目前Snappy默认。
Hive不使用Map Reduce的情况
Hive的优化
具体优化