在MR中创建数据到hive中使用

在MR中创建数据并在Hive中使用
1.MR中的输出必须为TextOutputFormat
2.确认你要通过hive查询的格式,支持复合格式,array,map,struct,分隔符可以通过一下来设置,也可以通过注入数据来查询
FIELDS TERMINATED BY '\011'  --- 建议,这样可以服用MR的key和value的分隔符
COLLECTION ITEMS TERMINATED BY '\002' 第一层集合的字段的分隔符
。。。之后的字段的分隔符建议注入数据到hive中再查询
3.注入语句
insert into table TABLE_NAME
select
id as table_id, // <- id 是从导入的表中查询出的字段,table_id是新建的字段
1 as index, //<- 当需要手动设置一些字段时,可以直接使用数字或者字符串来占位
array(named_struct('id',111,'type',2)) as test_struct_array,//<-设置设置一个包含自定义对象的列表的字段
from dummy limit 1//<- dummy 是一个空数据表, 可以供临时使用,记得添加limit 来限制插入的数据量

4.查看数据 通过hadoop fs -text {hadoop_path}/* >> {filepath} 来导出数据,
通过vi file.txt来查看你需要的分割符号。一般来说是从\001往后排的,有n层就会到\00n

5.数据和schema都准备好之后,通过alter 语句来挂载数据到hive的schema上


alter table TABLE_NAME add if not exists partition (year='2016',month='02',day='18') location '{hadoop文件的绝对路径}';

这里出现了partition,需要在schema的建表语句中建立好,才能在这里使用


CREATE EXTERNAL TABLE IF NOT EXISTS `rtb_zidfunnel`(
table_id STRING,
index INT,
test_struct_array ARRAY<STRUCT<id:INT,type:INT>>,
)PARTITIONED BY(
`year` STRING,
`month` STRING,
`day` STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\011'
COLLECTION ITEMS TERMINATED BY '\002'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'hdfs://SHYF-H11-BH03:52310/path'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值