在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'
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'