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语法很像,也有很多类似或相同的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据攻城小狮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值