Hive编程指南01

本文档是Hive编程指南的第一部分,主要涵盖了Hive的命令行界面操作,包括‘一次使用’命令、从文件执行查询、hiverc文件和其他功能。此外,还介绍了Hive的基本数据类型、文件格式以及HiveQL的数据定义,如创建、修改和管理表,以及分区表的概念。
摘要由CSDN通过智能技术生成

Hive编程指南01

命令行界面操作

1.Hive中"一次使用"命令

(1)用户可能有时期望执行一个或多个查询(使用分号分割),执行完毕后hive CLI立即退出。-e 选项可以实现这样的功能。

[root@hadoop01 ~]# hive -e "SELECT * FROM emp LIMIT 3";

Logging initialized using configuration in file:/opt/modules/apache/hive-1.2.1/conf/hive-log4j.properties
OK
emp.empno	emp.ename	emp.job	emp.mgr	emp.hiredate	emp.sal	emp.comm	emp.deptno
1234	JACK	CLERK	7856	1998-2-23	1300.0	NULL	50
7369	SMITH	CLERK	7902	1980-12-17	800.0	NULL	20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.0	300.0	30
Time taken: 2.014 seconds, Fetched: 3 row(s)
[root@hadoop01 ~]#

(2)-S 选项可以开启静默模式,这样可以在输出结果中去掉"OK" 和 “Time taken” 等行,以及其他一些无关紧要的输出信息。

[root@hadoop01 ~]# hive -S -e "SELECT * FROM emp LIMIT 5";
emp.empno	emp.ename	emp.job	emp.mgr	emp.hiredate	emp.sal	emp.comm	emp.deptno
1234	JACK	CLERK	7856	1998-2-23	1300.0	NULL	50
7369	SMITH	CLERK	7902	1980-12-17	800.0	NULL	20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.0	300.0	30
7521	WARD	SALESMAN	7698	1981-2-22	1250.0	500.0	30
7566	JONES	MANAGER	7839	1981-4-2	2975.0	NULL	20
[root@hadoop01 ~]# hive -S -e "SELECT * FROM emp LIMIT 5" >> /root/temp.txt
[root@hadoop01 ~]# cat temp.txt 
emp.empno	emp.ename	emp.job	emp.mgr	emp.hiredate	emp.sal	emp.comm	emp.deptno
1234	JACK	CLERK	7856	1998-2-23	1300.0	NULL	50
7369	SMITH	CLERK	7902	1980-12-17	800.0	NULL	20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.0	300.0	30
7521	WARD	SALESMAN	7698	1981-2-22	1250.0	500.0	30
7566	JONES	MANAGER	7839	1981-4-2	2975.0	NULL	20

(3)获取set 属性值与set 属性名小技巧

[root@hadoop01 ~]# hive -S -e "set" | grep warehouse
hive.metastore.warehouse.dir=/user/hive/warehouse
hive.warehouse.subdir.inherit.perms=true

2.从文件中执行Hive查询

(1)Hive中可以使用 -f 文件名 方式执行指定文件中的一个或多个查询语句,按照惯例,一般把这些Hive查询文件保存为具有.q或者.hql后缀名的文件

[root@hadoop01 ~]# cat test.hql 
INSERT INTO TABLE emp VALUES(7564,'NIKE','SALESMAN',7432,'1999-12-20',1500.00,600.00,30);
INSERT INTO TABLE emp VALUES(7897,'JACKSON','SALESMAN',7750,'1995-4-24',13500.00,500.00,30);
SELECT * FROM emp;
[root@hadoop01 ~]# hive -S -f /root/test.hql
_col0	_col1	_col2	_col3	_col4	_col5	_col6	_col7
_col0	_col1	_col2	_col3	_col4	_col5	_col6	_col7
emp.empno	emp.ename	emp.job	emp.mgr	emp.hiredate	emp.sal	emp.comm	emp.deptno
1234	JACK	CLERK	7856	1998-2-23	1300.0	NULL	50
7369	JACK	SALESMAN	7698	1981-2-20	1600.0	300.0	30
7724	WILLAM	SALESMAN	7750	1991-3-11	1750.0	300.0	30
7564	NIKE	SALESMAN	7432	1999-12-20	1500.0	600.0	30
7897	JACKSON	SALESMAN	7750	1995-4-24	13500.0	500.0	30
7369	SMITH	CLERK	7902	1980-12-17	800.0	NULL	20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.0	300.0	30
7521	WARD	SALESMAN	7698	1981-2-22	1250.0	500.0	30
7566	JONES	MANAGER	7839	1981-4-2	2975.0	NULL	20
7654	MARTIN	SALESMAN	7698	1981-9-28	1250.0	1400.0	30
7698	BLAKE	MANAGER	7839	1981-5-1	2850.0	NULL	30
7782	CLARK	MANAGER	7839	1981-6-9	2450.0	NULL	10
7788	SCOTT	ANALYST	7566	1987-4-19	3000.0	NULL	20
7839	KING	PRESIDENT	NULL	1981-11-17	5000.0	NULL	10
7844	TURNER	SALESMAN	7698	1981-9-8	1500.0	0.0	30
7876	ADAMS	CLERK	7788	1987-5-23	1100.0	NULL	20
7900	JAMES	CLERK	7698	1981-12-3	950.0	NULL	30
7902	FORD	ANALYST	7566	1981-12-3	3000.0	NULL	20
7934	MILLER	CLERK	7782	1982-1-23	1300.0	NULL	10

(2)在Hive shell 中用户可以使用SOURCE命令来执行一个脚本文件。

[root@hadoop01 ~]# cat test.hql 
SELECT * FROM emp LIMIT 5;
[root@hadoop01 ~]# hive

Logging initialized using configuration in file:/opt/modules/apache/hive-1.2.1/conf/hive-log4j.properties
hive (default)> SOURCE /root/test.hql
              > ;
OK
emp.empno	emp.ename	emp.job	emp.mgr	emp.hiredate	emp.sal	emp.comm	emp.deptno
1234	JACK	CLERK	7856	1998-2-23	1300.0	NULL	50
7369	JACK	SALESMAN	7698	1981-2-20	1600.0	300.0	30
7724	WILLAM	SALESMAN	7750	1991-3-11	1750.0	300.0	30
7564	NIKE	SALESMAN	7432	1999-12-20	1500.0	600.0	30
7897	JACKSON	SALESMAN	7750	1995-4-24	13500.0	500.0	30
Time taken: 1.082 seconds, Fetched: 5 row(s)

3.hiverc文件

-i 文件名 选项允许用户指定一个文件,当CLI启动时,在提示符出现前会先执行这个文件。(待再次考证)hive会自动在HOME(当前用户家目录)目录下寻找名为.hiverc的文件,而且会自动执行这个文件中的命令。

对于用户需要频繁执行的命令,使用这个文件时非常方便的。例如:设置系统属性,或者增加对于Hadoop的分布式内存进行自定义的hive扩展的Java包(JAR文件)。

$HIVE_HOME/.hiverc

ADD JAR /path/to/custom_hive_extensions.jar;
set hive.cli.print.current.db=true;
set hive.exec.mode.local.auto=true;

4.Hive CLI的其他功能

(1)自动补全功能

如果在输入的过程中敲击tab键,那么CLI会自动补全而可能的关键字或者函数名。

(2)查看操作历史命令

Hive会将最近的10000行命令记录到文件$ HIVE_HOME/.hivehistory中。

Tips:大多数导航按键使用的Control+字母和bash shell中是相同的:

  • Control+A:移动光标到行首
  • Control+B:移动光标到行尾

5.执行shell命令

用户不需要退出hive CLI就可以执行简单的bash shell命令。只需要在命令前加上!并且以分号(;)结尾就可以。

hive (default)> !ls;
temp.txt
test.hql
hive (default)> !pwd;
/root

Hive CLI中不能使用需要用户进行交互式命令,而且不支持shell的管道功能和文件的自动补全功能。

6.在Hive内使用Hadoop的dfs命令

用户可以在Hive CLI中执行Hadoop的dfs…命令,只需要将hadoop命令中关键字hdfs去掉,然后以分号结尾就可以了。

hive (default)> dfs -ls /user/hive/warehouse;
Found 11 items
drwxrwxr-x   - root supergroup          0 2019-06-14 02:49 /user/hive/warehouse/db_emp.db
drwxrwxr-x   - root supergroup          0 2019-06-16 01:09 /user/hive/warehouse/dept
drwxrwxr-x   - root supergroup          0 2019-06-14 02:39 /user/hive/warehouse/dept_exter
drwxrwxr-x   - root supergroup          0 2019-06-16 12:59 /user/hive/warehouse/emp
drwxrwxr-x   - root supergroup          0 2019-06-11 04:03 /user/hive/warehouse/emp_bu
drwxrwxr-x   - root supergroup          0 2019-06-14 03:38 /user/hive/warehouse/emp_bu01
drwxrwxr-x   - root supergroup          0 2019-06-14 03:39 /user/hive/warehouse/emp_buck
drwxrwxr-x   - root supergroup          0 2019-06-09 14:40 /user/hive/warehouse/ha01
drwxrwxr-x   - root supergroup          0 2019-06-09 16:12 /user/hive/warehouse/ha02
drwxrwxr-x   - root supergroup          0 2019-06-10 23:32 /user/hive/warehouse/student
drwxrwxr-x   - root supergroup          0 2019-06-10 23:42 /user/hive/warehouse/student01
[root@hadoop01 hive-1.2.1]# hdfs dfs -ls /user/hive/warehouse
Found 11 items
drwxrwxr-x   - root supergroup          0 2019-06-14 02:49 /user/hive/warehouse/db_emp.db
drwxrwxr-x   - root supergroup          0 2019-06-16 01:09 /user/hive/warehouse/dept
drwxrwxr-x   - root supergroup          0 2019-06-14 02:39 /user/hive/warehouse/dept_exter
drwxrwxr-x   - root supergroup          0 2019-06-16 12:59 /user/hive/warehouse/emp
drwxrwxr-x   - root supergroup          0 2019-06-11 04:03 /user/hive/warehouse/emp_bu
drwxrwxr-x   - root supergroup          0 2019-06-14 03:38 /user/hive/warehouse/emp_bu01
drwxrwxr-x   - root supergroup          0 2019-06-14 03:39 /user/hive/warehouse/emp_buck
drwxrwxr-x   - root supergroup          0 2019-06-09 14:40 /user/hive/warehouse/ha01
drwxrwxr-x   - root supergroup          0 2019-06-09 16:12 /user/hive/warehouse/ha02
drwxrwxr-x   - root supergroup          0 2019-06-10 23:32 /user/hive/warehouse/student
drwxrwxr-x   - root supergroup          0 2019-06-10 23:42 /user/hive/warehouse/student01

这种使用hadoop命令的方式实际上比与等价的在bash shell中hdfs dfs…命令更为高效。因为后者每次都会启动一个新的JVM实例,而hive会在同一个进程中执行这些命令。

7.Hive脚本中如何进行注释

用户可以使用以–开头的字符串来表示注释

--hql query
--This is the best Hive script evar!!
SELECT * FROM emp LIMIT 5

8.显示字段名称

通过设置hiveconf配置项hive.cli.print.header为true来开启这个功能

[root@hadoop01 ~]# cat .hiverc
set hive.cli.print.current.db=true;
set hive.cli.print.header=true;

数据类型和文件格式

1.基本数据类型

数据类型 长度 栗子
TINYINT 1byte有符号数 20
SMALINT 2byte有符号数 20
INT 4byte有符号数 20
BIGINT 8byte有符号数 20
BOOLEAN 布尔类型,true或者false TRUE
FLOAT 单精度浮点数 3.14159
DOUBLE 双精度浮点数 3.14159
STRING 字符序列。可以指定字符集。可以使用单引号或者双引号 ‘alex’,“johnson”
TIMESTAMP 整数,浮点数或者字符串 13854848(Unix新纪元秒),1584125.415645(Unix新纪元秒,带有纳秒数),‘2019-07-16 12:34:24.123456789’(JDBC所兼容的java.sql.Timestamp时间格式)
BINARY 字节数组

2.集合数据类型

数据类型 描述 示例
STRUST 类C语言的struct或者“对象”,都可以通过点“.”符号访问元素内容,STRUCT{first STRING,last String},那么第一个元素可以通过字段名.first来引用。 struct(‘alex’,‘mike’)
MAP MAP是一组键值对元素集合,使用数组表示法(例如[‘key’])可以访问元素。 map(‘first’,‘john’,‘last’,‘white’)
ARRAY 数组是一组具有相同数据类型和名称的变量的集合,数组下标从0开始 Array(‘John’,‘Joe’)
CREATE TABLE employees(
	name STRING,
	salary DOUBLE,
	subordinates ARRAY<STRING>,
	deductions MAP<STRING,FLOAT>,
	address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>);
)
hive (default)> show create table employees;
OK
createtab_stmt
CREATE TABLE `employees`(
  `name` string, 
  `salary` double, 
  `subordinates` array<string>, 
  `deductions` map<string,float>, 
  `address` struct<street:string,city:string,state:string,zip:int>)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://hadoop01:8020/user/hive/warehouse/employees'
TBLPROPERTIES (
  'transient_lastDdlTime'='1560666188')
Time taken: 0.149 seconds, Fetched: 16 row(s)

3.文本文件数据编码

分隔符 描述
\n 对于文本文件来说,每行都是一条记录,因此换行符可以分割记录
^A(ctrl+v,ctrl+a) 用于分隔字段(列),在CREATE TABLE语句中可以使用八进制编码\001表示
^B(ctrl+v,ctrl+b) 用于分隔ARRAY或者STRUCT中的元素,或用于MAP中键-值对之间的分隔。在CREATE TABLE语句中可以使用八进制编码\002表示
^C(ctrl+v,ctrl+c) 用于MAP中键和值之间的分隔。在CREATE TABLE语句中可以使用八进制编码\003表示
John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Taxes^C.2^BStateTaxes^C.05^BInsurance^C.1^A1 Michigan Ave.^BChicago^BIL^B60600
Mary Smith^A80000.0^ABill King^AFederal Taxes^C.2^BStateTaxes^C.05^BInsurance^C.1^A100 Ontario St.^BChicago^BIL^B60601
Todd Jones^A70000.0^A^AFederal Taxes^C.15^BStateTaxes^C.03^BInsurance^C.1^A200 Chicago Ave.^BOak Park^BIL^B60700
Bill King^A60000.0^A^AFederal Taxes^C.15^BStateTaxes^C.03^BInsurance^C.1^A300 Obscure Dr.^BObscuria^BIL^B60100
CREATE TABLE employees(
	name STRING,
	salary DOUBLE,
	subordinates ARRAY<STRING>,
	deductions MAP<STRING,FLOAT>,
	address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
hive (default)> desc formatted employees;
OK
col_name	data_type	comment
# col_name            	data_type           	comment             
	 	 
name                	string              	                    
salary              	double              	                    
sub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值