ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第五章 Hive常用操作

2021-08-17 10:35:20  阅读:134  来源: 互联网

标签:常用 default hive -- 第五章 Hive student data


一、Hive基本操作

#1.启动hive
[root@stg-airflow001 ~]$ hive

#2.查看数据库
hive>show databases;

#3.打开默认数据库
hive>use default;

#4.显示default数据库中的表
hive>show tables;

#5.创建一张表
hive> create table student(id int, name string) ;

#6.显示数据库中有几张表
hive>show tables;

#7.查看表的结构
hive>desc student;

#8.向表中插入数据
hive> insert into student values(1000,"ss");

#9.查询表中数据
hive> select * from student;

#10.退出hive
hive> quit;

二、Hive本地文件导入

需求:将本地/data/student.txt这个目录下的数据导入到hive的student(id int, name string)表中。

#1.数据准备:在/data/student.txt这个目录下准备数据
1.创建目录
[root@stg-airflow001 ~]$ mkdir /data
[root@stg-airflow001 ~]$ cd /data

#2.在/data/目录下创建student.txt文件并添加数据
[root@stg-airflow001 data]$ touch student.txt
[root@stg-airflow001 data]$ vi student.txt
1001 jindada
1002 yyds
1003 whoareyou
注意以tab键间隔。

#3.启动hive
[root@stg-airflow001 ~]$ hive

#4.显示数据库
hive>show databases;

#5.使用default数据库
hive>use default;

#6.显示default数据库中的表
hive>show tables;

#7.删除已创建的student表
hive> drop table student;

#8.创建student表, 并声明文件分隔符’\t’
hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

#9.加载/data/student.txt 文件到student数据库表中。
hive> load data local inpath '/data/student.txt' into table student;

#10.Hive查询结果
hive> select * from student;
OK
1001 jindada
1002 yyds
1003 whoareyou
Time taken: 0.266 seconds, Fetched: 3 row(s)

三、Hive常用交互命令

#1.“-e”不进入hive的交互窗口执行sql语句
[root@stg-airflow001 ~]$ hive -e "select id from student;"

#2.“-f”执行脚本中sql语句
1.在/data目录下创建hivef.sql文件
[root@stg-airflow001 data]$ touch hivef.sql

2.文件中写入正确的sql语句
select *from student;

3.执行文件中的sql语句
[root@stg-airflow001 ~]$ hive -f /data/hivef.sql

4.执行文件中的sql语句并将结果写入文件中
[root@stg-airflow001 ~]$ hive -f /data/hivef.sql > /data/hive_result.txt

四、Hive其他命令操作

#1.退出hive窗口: 
hive(default)>exit;
hive(default)>quit;

在新版中没区别了,在以前的版本是有的:
exit:先隐性提交数据,再退出;
quit:不提交数据,退出;

#2.在hive cli命令窗口中如何查看hdfs文件系统
hive(default)>dfs -ls /;

#3.在hive cli命令窗口中如何查看hdfs本地系统
hive(default)>! ls /data/;

#4.查看在hive中输入的所有历史命令
(1)进入到当前用户的根目录/root
(2)查看. hivehistory文件
[root@stg-airflow001 ~]$ cat .hivehistory

五、Hive参数配置方式

#1.查看当前所有的配置信息
hive>set;

1.配置文件方式

默认配置文件:hive-default.xml
用户自定义配置文件:hive-site.xml

ps:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

2.命令行参数方式

启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。

例如:
[root@stg-airflow001 ~]$ hive -hiveconf mapred.reduce.tasks=10;

# 查看参数设置:
hive (default)> set mapred.reduce.tasks;

ps:仅对本次hive启动有效

3.参数声明方式

可以在HQL中使用SET关键字设定参数

例如:
hive (default)> set mapred.reduce.tasks=100;

# 查看参数设置
hive (default)> set mapred.reduce.tasks;

ps:仅对本次hive启动有效。

上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log42j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

六、Hive数据类型

1.数字类型

类型 长度 备注
TINYINT 1字节 有符号整型
SMALLINT 2字节 有符号整型
INT 4字节 有符号整型
BIGINT 8字节 有符号整型
FLOAT 4字节 有符号单精度浮点数
DOUBLE 8字节 有符号双精度浮点数
DECIMAL -- 可带小数的精确数字字符串

2.日期时间类型

类型 长度 备注
TIMESTAMP -- 时间戳,内容格式:yyyy-mm-dd hh:mm:ss[.f...]
DATE -- 日期,内容格式:YYYY­MM­DD
INTERVAL -- --

3.字符串类型

类型 长度 备注
STRING -- 字符串
VARCHAR 字符数范围1 - 65535 长度不定字符串
CHAR 最大的字符数:255 长度固定字符串
对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。

4.Misc类型

类型 长度 备注
BOOLEAN -- 布尔类型 TRUE/FALSE
BINARY -- 字节序列

5.复合类型

类型 长度 备注
ARRAY -- 包含同类型元素的数组,索引从0开始ARRAY<data_type>
MAP -- 字典 MAP<primitive_type, data_type>
STRUCT -- 结构体STRUCT<col_name : data_type [COMMENT col_comment], ...>
UNIONTYPE -- 联合体UNIONTYPE<data_type, data_type, ...>
Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

案例实操
#1.假设某表有如下一行,我们用JSON格式来表示其数据结构。在Hive下访问的格式为
{
    "name": "songsong",
    "friends": ["bingbing" , "lili"] ,       //列表Array, 
    "children": {                      //键值Map,
        "xiao song": 18 ,
        "xiaoxiao song": 19
    }
    "address": {                      //结构Struct,
        "street": "hui long guan" ,
        "city": "beijing" 
    }
}

#2.基于上述数据结构,我们在Hive里创建对应的表,并导入数据。
创建本地测试文件test.txt
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

注意,MAP,STRUCT和ARRAY里的元素间关系都可以用同一个字符表示,这里用“_”。

#3.Hive上创建测试表test
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

字段解释:
row format delimited fields terminated by ‘,’ – 列分隔符
collection items terminated by ‘_’ --MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)
map keys terminated by ‘:’ – MAP中的key与value的分隔符
lines terminated by ‘\n’; – 行分隔符

#4.导入文本数据到测试表
hive (default)> load data local inpath '/data/test.txt' into table test;

#5.访问三种集合列里的数据,以下分别是ARRAY,MAP,STRUCT的访问方式
hive (default)> select friends[1],children['xiao song'],address.city from test where name="songsong";
OK
_c0     _c1     city
lili    18      beijing
Time taken: 0.076 seconds, Fetched: 1 row(s)

七、Hive类型转化

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作。

#1.隐式类型转换规则如下:
(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。
(2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。
(3)TINYINT、SMALLINT、INT都可以转换为FLOAT。
(4)BOOLEAN类型不可以转换为任何其它的类型。

#2.可以使用CAST操作显示进行数据类型转换,例如CAST(‘1’ AS INT)将把字符串’1’ 转换成整数1;如果强制类型转换失败,如执行CAST(‘X’ AS INT),表达式返回空值 NULL。

标签:常用,default,hive,--,第五章,Hive,student,data
来源: https://www.cnblogs.com/jhno1/p/15151173.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有