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的主要内容,如果未能解决你的问题,请参考以下文章

《hive编程指南》学习文档

《hive编程指南》学习文档

Hive编程指南学习01

《hive编程指南》学习文档

《hive编程指南》学习文档

Hive编程指南_学习笔记01