我是靠谱客的博主 仁爱寒风,最近开发中收集的这篇文章主要介绍直接将文件put到Hdfs后建Hive表查询数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

直接将文件put到Hdfs后建Hive表查询数据

由于业务需要,有时需要将其他地方的文件数据导入HDFS,然后建Hive表进行数据查询或数据业务统计。这里演示如何将本地文件先put到Hive已存在的空表中,然后查询数据。

1-先建立一个空表

CREATE TABLE `hive_test.direct_load_file_into_table`(
  `id` int,
  `name` string)
PARTITIONED BY (`year` string COMMENT '年', `month` string COMMENT '月', `day` string COMMENT '日')
row format delimited fields terminated by 't'
STORED AS textfile;

然后show create table,确认下该该表的HDFS路径,比如/user/hive/warehouse/hive_test.db/direct_load_file_into_table

CREATE TABLE `direct_load_file_into_table`(
  `id` int,
  `name` string)
PARTITIONED BY (
  `year` string COMMENT '年',
  `month` string COMMENT '月',
  `day` string COMMENT '日')
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'field.delim'='t',
  'serialization.format'='t')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://xxxxxx:9000/user/hive/warehouse/hive_test.db/direct_load_file_into_table'
TBLPROPERTIES (
  'transient_lastDdlTime'='1523536404')

2-向该路径下put文件

这里将本地两个文件,put到上一步所建表的hdfs路径下,同时演示文件夹迭代比如这里除了分区2018/04/01,额外添加了一层文件夹01和02

hadoop fs -mkdir -p  /user/hive/warehouse/hive_test.db/direct_load_file_into_table/2018/04/01/01
hadoop fs -mkdir -p  /user/hive/warehouse/hive_test.db/direct_load_file_into_table/2018/04/01/02

hadoop fs -ls /user/hive/warehouse/hive_test.db/direct_load_file_into_table/2018/04/01
drwxr-xr-x   - hjw01 supergroup          0 2018-04-12 20:12 /user/hive/warehouse/hive_test.db/direct_load_file_into_table/2018/04/01/01
drwxr-xr-x   - hjw01 supergroup          0 2018-04-12 20:12 /user/hive/warehouse/hive_test.db/direct_load_file_into_table/2018/04/01/02

本地文件如下

[hjw01@f0d97899be95 data]$ more 01.txt
101	张三
102	李四
103	王五
[hjw01@f0d97899be95 data]$ more 02.txt
201	张三
202	李四
203	王五

将本地文件put到hdfs中

hadoop fs -put  01.txt /user/hive/warehouse/hive_test.db/direct_load_file_into_table/2018/04/01/01
hadoop fs -put  02.txt /user/hive/warehouse/hive_test.db/direct_load_file_into_table/2018/04/01/02

3-建立表的分区

建立分区就可以直接使用分区下的数据

alter table hive_test.direct_load_file_into_table add if not exists   partition(year='2018',month='04',day='01') location '2018/04/01';

4-查询验证数据

这里我们顺带演示了文件多层迭代,需要set 参数,具体如下

set hive.mapred.supports.subdirectories=true;
set mapreduce.input.fileinputformat.input.dir.recursive=true;
select 
* 
from
hive_test.direct_load_file_into_table
where
concat(year,month,day) = '20180401'

查询结果

hive> set hive.mapred.supports.subdirectories=true;
hive> set mapreduce.input.fileinputformat.input.dir.recursive=true;
hive> select
    > *
    > from
    > hive_test.direct_load_file_into_table
    > where
    > concat(year,month,day) = '20180401';
OK
101	张三	2018	04	01
102	李四	2018	04	01
103	王五	2018	04	01
201	张三	2018	04	01
202	李四	2018	04	01
203	王五	2018	04	01
Time taken: 1.775 seconds, Fetched: 6 row(s)

最后

以上就是仁爱寒风为你收集整理的直接将文件put到Hdfs后建Hive表查询数据的全部内容,希望文章能够帮你解决直接将文件put到Hdfs后建Hive表查询数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部