hive基础知识

进公司实习,第一个任务就是自学hive。。。。

知识点总结帮助自己学习

Hive -语法:

非关系型数据库语言,语言逻辑与MySQL大致相似,但是要求能够更加严格一点。

hive> ALTER TABLE student1 ADD COLUMNS  

    > (address STRING,grade STRING);

在添加属性的时候,需要添加columns关键字(列)

 

•ROW FORMAT DELIMITED 行格式分隔

 

如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE

 

Distinct:查询的数据去重

 

LOAD DATA LOCAL INPATH '/home/hadoop/djt/user.txt'  INTO TABLE group_test;

从指定位置向指定表中导入数据(保留源文件)

 

ORDER BY 会对输入做全局排序,因此只有一个 Reduce(多个 Reduce 无法保证全局有序)会导致当输入规模较大时,需要较长的计算时间。使用 ORDER BY 查询的时候,为了优化查询的速度,使用 hive.mapred.mode 属性。

hive.mapred.mode = nonstrict;(default value/默认值) 默认是不精确的

hive.mapred.mode=strict;

与数据库中 ORDER BY 的区别在于,在 hive.mapred.mode=strict 模式下必须指定limit ,否则执行会报错。

hive> set hive.mapred.mode=strict;

hive> select * from group_test order by uid limit 5;

在设置hive.mapred.mode为精确时,必须添加limit限制条件,否则会报错

 

CLUSTER BY 查询

cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。

 

 

创建索引:

hive> create index user_index on table user(id) as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild IN TABLE user_index_table;

创建索引,索引名称为:user_index 在user表,表的user(id)为索引

 

Hive关键字concat_ws:带着间隔符号的拼接,使用语法:

hive> select concat_ws(‘,’,'abc’,'def’,'gh’) from dual;  

输出结果:abc,def,gh

字符串长度:length,字符串翻转:reverse,字符串拼接concat

字符串截取:substring,substr

字符串转大写:upper(string a),ucase(string a)

字符串转小写:lower(string a) ,lcase(string a)

去两侧空格函数:trim(String a)

去左侧空格ltrim   去右侧空格rtrim

个数统计:count   和统计:sum

求平均数:avg

求最大最小值:max,min

 

 

复合类型操作;

Map类型:create table map_test as select map( kay,value,kay,value) from student

Struct类型:根据输入的参数构造结构体类型

语法:

hive> create table array_test as select array('jay','liu','gang') from student;

hive> describe array_test;

hive> select array_test from array_test;

 

 

用户自定义函数udf:

Hive支持的udf用户自定义函数有三种:udf函数可以直接作用于select语句,对查询结构做格式化处理之后,在输出内容

用户自定义函数 UDF

 UDF(User Defined Function,用户自定义函数) 对数据进行处理。UDF 函数可以直接应用于 select 语句,对查询结构做格式化处理后,再输出内容。

 Hive可以允许用户编写自己定义的函数UDF,来在查询中使用。Hive中有3种UDF:

 1)UDF:操作单个数据行,产生单个数据行。

 2)UDAF:操作多个数据行,产生一个数据行。

 3)UDTF:操作一个数据行,产生多个数据行一个表作为输出。

 用户构建的UDF使用过程如下:

 第一步:继承UDF或者UDAF或者UDTF,实现特定的方法。

 第二步:将写好的类打包为jar。如hivefirst.jar。

 第三步:进入到Hive外壳环境中,利用add jar /home/hadoop/hivefirst.jar 注册该jar文件。

 第四步:为该类起一个别名,create temporary function mylength as 'com.whut.StringLength';这里注意UDF只是为这个Hive会话临时定义的。

 第五步:在select中使用mylength()。

 

实现特定方法,打包为jar,进入外壳环境注册,为该类起个别名,在查询语句中使用

 

 注意事项:

  1. 一个用户UDF必须继承org.apache.hadoop.hive.ql.exec.UDF;

2、一个UDF必须要包含有evaluate()方法,但是该方法并不存在于UDF中。evaluate的参数个数以及类型都是用户自己定义的。在使用的时候,Hive会调用UDF的evaluate()方法。

 

 

角色的创建与删除:

Create role  role_name;

角色删除:drop role role_name

 

角色的授权与撤销:

将角色role_test授权给X:

Grant role role_test to user X;

取消用户X的授权:

Revoke role role_test from user X;

 

授权用户某种权限

Grant select on database default to user X;

给予搜索权限在数据库权限中,to用户X

 

查看用户权限;

Show grant user X on database default;

显示权限: 用户X在该数据库权限中

 

收回用户权限

Revoke select on database default from user X;

收回指定权限在数据库的权限范围内,从用户 X

Revoke select on database default from user X;

 

创建外部表

分区表

插入select数据到表中

case when

查看表结构

hadoop命令

order by

group by

 

连接跳板机:   1.50    0    su - work 密码:music2016     hive

 

 

动态分区:在进行动态分区操作时,需要打开一个设置:

set hive.exec.dynamic.partition=true;  

set hive.exec.dynamic.partition.mode=nonstrict;

 

 

Hive中的桶操作:是通过partition的clustered by(集群分布)实现的,bucket中的数据主要是通过sort by实现的

 

Collection items terminated by “,”:使用逗号分隔符

 

Hive复合数据类型:array,struct,map

在select语句中使用复合数据类型的时候的格式如下:

 

Map使用:

Create table student (id INT, name map<String ,int>)

Row format delimited

Fields terminated by \t’

Collection items terminated by ,

Map keys terminated by :;

在使用struct和array时,不需要添加类似Map keys terminated by :;语句

 

Map查询操作:在select语句中需要使用‘[‘’]’ 语法:

Select name[string] from student

 

Array使用:

Create table student (name String, student_id_list array<int>)

Row format delimited

Fields terminated by \t’

Collection items terminated by ,;

 

Array查询操作:在select语句中需要使用‘[]’ 语法:

Select student_id_list[3] from student

 

Struct使用:

Create table student (id INT, info struct <name:String , age:int>)

Row format delimited

Fields terminated by \t

Collection items terminated by ,;

 

Struct查询操作:在select语句中需要使用‘.’  语法:

Select info.age from student

 

Hive只支持等连接,外连接,左半连接,而且hive可以join两个以上的表

只有等连接时才可以使用

 

org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler

 

创建分区表的时候不需要collection语句

目前已经知道的需要collection的语句只有三种复合结构,而且,map还需要keys的分隔符

 

创建分区表:语法

Create table X(age int,name string)partition by(id int,class int)

Row format delimit

Fields terminated by‘,’

Age和name是真实例,id和class是伪例

创建动态分区的时候,必须采用非严格模式,并设置分区模式为true

分区缺省为false

 

 

Hive的数据优化:按照指定规则分区,合理设置bucket

 

Join原则:在使用join语句时,应该将条目少的表或者子查询放在join的左边

 

 

用户自定义函数UDF:

Hive中一共有三种用户自定义函数:

分别是:UDF:操作单个数据行,产生单个数据行

UDAF:操作多个数据行,产生一个数据行

UDTF:操作一个数据行,产生多个数据行,一个表输出

用户构建UDF使用过程如下:

第一步:继承UDF或者UDTF或者UDAF,实现特定方法

第二步:将写好的类打包成jar

第三步:进入到Hive的外壳环境当中,利用add jar /home/hadoop/.....  .jar 注册该文件

第四步:为该类起一个别名 create temporary function XXX as ‘com.whut.StringLength’;

UDF只是为这个Hive回话临时定义的

第五步:在select中使用XXX。

 

 

### 回答1: Hive是一个基于Hadoop的数据仓库工具,它提供了一种类似SQL的查询语言,用于将结构化数据存储在Hadoop集群上,并进行查询和分析。下面是一些关于Hive基础知识的选择题: 1. Hive的主要特点是什么? a) 提供类似SQL的查询语言 b) 可以在Hadoop集群上进行数据存储和分析 c) 可以处理结构化和半结构化数据 d) 所有选项都正确 答案:d) 所有选项都正确 2. Hive将数据存储在哪里? a) HBase b) Hadoop Distributed File System (HDFS) c) Cassandra d) MySQL 答案:b) Hadoop Distributed File System (HDFS) 3. Hive中的表可以与以下哪种文件格式关联? a) CSV b) JSON c) Parquet d) 所有选项都正确 答案:d) 所有选项都正确 4. Hive使用什么来对数据进行分区和排序? a) HDFS b) Tez c) MapReduce d) Apache Spark 答案:c) MapReduce 5. Hive中的数据查询和分析通过什么来实现? a) Hive Query Language (HQL) b) Structured Query Language (SQL) c) Apache Hive d) Apache Hadoop 答案:a) Hive Query Language (HQL) 总之,Hive是一个基于Hadoop的数据仓库工具,具有类似SQL的查询语言,可以在Hadoop集群上存储和分析结构化和半结构化数据。它使用HDFS来存储数据,可以与多种文件格式关联,并使用MapReduce来进行数据分区和排序。数据查询和分析通过Hive Query Language (HQL)来实现。 ### 回答2: Hive是一款基于Hadoop的数据仓库工具,它提供了方便的数据查询和分析的功能。接下来我将回答一些关于Hive基础知识的选择题。 1. Hive中的表是如何定义的? 答案:C. 使用HiveQL语句创建表。 2. 在Hive中,数据是如何存储的? 答案:B. 在Hadoop的HDFS文件系统中。 3. Hive中的分区是用来做什么的? 答案:A. 对数据进行逻辑上的划分,便于查询优化和数据管理。 4. 在Hive中,可以使用哪种语言进行数据查询? 答案:D. HiveQL。 5. 在Hive中,用来处理复杂逻辑和数据运算的是什么? 答案:B. Hive的UDF(用户定义函数)和UDAF(用户定义聚合函数)。 6. Hive的数据存储格式有哪些? 答案:A. 文本文件(TextFile)、序列文件(SequenceFile)和Parquet等。 7. Hive表中的数据可以通过什么方式进行加载? 答案:C. 使用Hive的LOAD DATA语句。 8. 在Hive中,用来创建管理表结构的是什么? 答案:B. Hive的元数据存储。 9. Hive的优势是什么? 答案:C. 简化了对Hadoop数据的查询和分析。 10. 使用Hive时,可以通过什么方式进行数据的导入和导出? 答案:D. 使用Hive的导入和导出命令。 以上是关于Hive基础知识的一些选择题的答案。Hive是一个功能强大且易于使用的工具,可以帮助用户更好地处理和分析大数据。掌握Hive基础知识对于进行数据仓库的建设和数据分析工作非常重要。 ### 回答3: Hive是一个开源的数据仓库基础架构,运行在Hadoop集群上。以下是关于Hive基础知识选择题的回答: 1. Hive中的数据存储在哪里? 答:Hive中的数据存储在Hadoop分布式文件系统(HDFS)中。 2. Hive中的数据是如何组织的? 答:Hive中的数据是以表(Tables)的形式进行组织的。 3. Hive中的表的结构是如何定义的? 答:Hive中的表的结构是通过DDL语句来定义的,包括表的名称、列名称、数据类型等信息。 4. Hive中的查询语言是什么? 答:Hive中的查询语言类似于SQL,称为HiveQL或HQL。 5. Hive中的查询语句是如何转换为MapReduce作业的? 答:Hive将查询语句转换为逻辑查询计划,然后将逻辑查询计划转换为物理查询计划,最后将物理查询计划转换为MapReduce作业。 6. Hive中的分区表是什么? 答:Hive中的分区表是按照一个或多个列的值分成不同的目录,并且每个目录下存储相应分区的数据。 7. Hive中的桶是什么? 答:Hive中的桶是将数据分成固定数量的文件的一种方式,目的是提高查询性能。 8. Hive中的内部表和外部表有什么区别? 答:内部表的数据和元数据都由Hive管理,删除内部表时会删除表的数据;而外部表的数据和元数据存储在外部的文件系统中,删除外部表时只会删除元数据。 9. Hive中的UDF是什么? 答:UDF全称为用户定义函数(User-Defined Functions),是由用户自定义的用于特定数据处理操作的函数。 10. Hive中的压缩是如何实现的? 答:Hive中的压缩是通过执行MapReduce作业时将数据进行压缩,以减少数据的存储空间和提高查询性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值