SQL ON Hadoop-Hive(四)-数据操作

2019.04.25更新,新增数据类型转换部分

一.装载数据

--可自动创建分区
load data [local] inpath 'file_path' [overwrite] into table table_name [partition(partcol1=val1,parcol2=val2...)]

使用local关键字,那么'file_path'应该为本地文件系统(hive客户端所在系统,如Linux)路径,是复制本地数据到HDFS上的目标位置;如果不使用该关键字,这个路径应为HDFS中的文件路径(HDFS文件系统中),是把本身就在HDFS上的数据剪切至目标位置-此时建议使用绝对路径(源文件、目标文件以及目录应该在同一个文件系统中)

hive不会验证装载的数据格式和表定义的格式是否匹配(行列分隔符,以及array、struct等数据类型的分隔符等,即不做数据转换),但会验证文件格式是否和表结构定义的一致性(例表创建时定义存储格式为sequencefile,那么装载进入的文件也应该是这种格式)

filepath可以是以下三种类型(建议使用绝对路径):

1.相对路径         project/data

2.绝对路径         /user/hiveproject/data

3.包含模式的完整URL  hdfs://namenode:8020/user/hiveproject/data

filepath可以引用一个文件或者一个目录

insert [overwrite|into] table table_name [partition(partcol1=val1,parcol2=val2...)] select ... from table_name1;   --查询语句装载数据

--一次查询产生多个不相交的输出
from source 
insert [overwrite|into] table table_name [partition (part='a')]
select id,name where id>=0 and id<100
insert [overwrite|into] table table_name_1 [partition (part='b')]
select id,name where id>=100 and id<200

二.导出数据

两种导出方式:导出至本地或者导出至HDFS,\n为默认换行符
insert [overwrite] [local] directory '/home/hadoop/r' [row format delimited fields terminated by ','] select * from test
--当hive表中的数据正好满足用户需要的数据格式,可直接复制文件或目录
hadoop fs -cp /user/hive/warehourss/source_table /user/hadoop

三.数据类型转换

Hive同Java一样包括隐式转换(implicit)和显式转换(explicitly)。Hive在需要时会对numeric类型进行隐式转换。比如对两个不同类型的数字进行比较,一个数据类型INT另一个SMALLINT类型,则SMALLINT隐式转换为INT,但不能隐式将INT转换成SMALLINT或TINYINT,除非用CAST函数。任何整数类型都可隐转换成范围更大类型。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可隐转换成DOUBLE。STRING也可隐转换成DOUBLE但BOOLEAN类型不能转换为其他任何数据类型

可用CAST函数显式将一个类型数据转换成另一个数据类型

cast(value AS TYPE)		#如果不能转换则输出NULL

注意事项:

1.浮点型转int类型是通过round()或floor()而不是cast()

2.BINARY类型只能转换成STRING类型。若确定BINARY类型是数字类型,cast(cast(a as string) as double)。也可将string类型转换成BINARY类型

3.Date类型只能在Date、Timestamp及string间转换

--返回date类型
cast(date as date)
--timestamp中年/月/日的值依赖于当地时区,结果返回date类型
cast(timestamp as date) 
--若string为YYYY-MM-DD格式则相应年/月/日date类型数据将会返回,但如果string不是YYYY-MM-DD格式的,结果则会返回NULL
cast(string as date) 
--基于当地时区生成对应date年/月/日的时间戳值
cast(date as timestamp)
--date所代表的年/月/日时间将转换成YYYY-MM-DD字符串
cast(date as string)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值