Hive编程指南学习02
Posted Weikun Xing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive编程指南学习02相关的知识,希望对你有一定的参考价值。
文章目录
常用基本类型
int bigint double string
我用的是hiveserver2
Hadoop和Hive服务都得启动
beeline -u jdbc:hive2://hadoop102:10000 -n xwk
0: jdbc:hive2://hadoop102:10000> use learnhive;
INFO : OK
INFO信息太多,我将只写关键代码
创建一个练习表,我们练习常用数据类型
插入数据
它会跑一个mapreduce,耐心等待
insert into test1 values (1001,13888888888888,10000.56,"zhangsan");
可以看到任务运行成功
查看数据
select * from test1;
在HDFS中,它是这样的
集合数据类型
Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。
假设某表有如下一行,我们用JSON格式来表示其数据结构。在Hive下访问的格式为
"name": "songsong",
"friends": ["bingbing" , "lili"] , //列表Array,
"children": //键值Map,
"xiao song": 19 ,
"xiaoxiao song": 18
"address": //结构Struct,
"street": "hui long guan" ,
"city": "beijing"
这个数据这样理解,有一个叫songsong的人,他的朋友是bingbing和lili,孩子们的信息是xiao song 19岁 和xiaoxiao song18岁,地方是街道:hui long guan,城市:beijing
创建test2表
create table test2(
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'; -- 行分隔符
创建本地测试文件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
[xwk@hadoop102 datafiles]$ pwd
/opt/datafiles
[xwk@hadoop102 datafiles]$ vim test.txt
将本地数据导入test2表
load data local inpath '/opt/datafiles/test.txt' into table test2;
查看数据
select * from test2;
第二种方法,直接将test.txt上传至HDFS上的test2表目录下
hdfs dfs -put /opt/datafiles/test.txt /user/hive/warehouse/learnhive.db/test2
此目录hive/conf/hive-site.xml于中设置
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
查询表中name,friends第一个元素,children中的xiao song和address中的street信息
select name,friends[0],children['xiao song'],address.street from test2;
+-----------+-----------+-------+----------------+
| name | _c1 | _c2 | street |
+-----------+-----------+-------+----------------+
| songsong | bingbing | 18 | hui long guan |
| yangyang | caicai | NULL | chao yang |
+-----------+-----------+-------+----------------+
类型转换
Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作。
隐式类型转换规则如下
(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。
(2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。 (3)TINYINT、SMALLINT、INT都可以转换为FLOAT。
(4)BOOLEAN类型不可以转换为任何其它的类型。
可以使用CAST操作显示进行数据类型转换
例如CAST(‘1’ AS INT)将把字符串’1’ 转换成整数1;如果强制类型转换失败,如执行CAST(‘X’ AS INT),表达式返回空值 NULL。
select cast('1' as int)+1;
+------+
| _c0 |
+------+
| 2 |
+------+
select cast('abc'as int);
+-------+
| _c0 |
+-------+
| NULL |
+-------+
select cast(3 as float);
+------+
| _c0 |
+------+
| 3.0 |
+------+
可以发现Hive和mysql语法很像,也有很多类似或相同的函数。
以上是关于Hive编程指南学习02的主要内容,如果未能解决你的问题,请参考以下文章