使用场景

在生产上,一般对数据清洗之后直接放到HDFS上,然后再将目录加载到分区表中;

准备数据

order_created.txt
用 tab分割

  1. 10703007267488 2014-05-01 06:01:12.334+01
  2. 10101043505096 2014-05-01 07:28:12.342+01
  3. 10103043509747 2014-05-01 07:50:12.33+01
  4. 10103043501575 2014-05-01 09:27:12.33+01
  5. 10104043514061 2014-05-01 09:03:12.324+01

order_created.txt 存放位置

  1. [root@zjj101 soft]# pwd
  2. /root/soft
  3. [root@zjj101 soft]# ls
  4. data docker hadoop-2.7.2 hive-1.2.1 myconf order_created.txt tmp
  5. [root@zjj101 soft]#

在hdfs上创建准备放数据的目录

准备放到这里:
/user/hive/warehouse/order_partition/

hive读取直接放到hdfs的数据,将目录加载到分区表中 - 图1
shell

  1. [root@zjj101 soft]# hadoop fs -mkdir /user/hive/warehouse/order_partition/event_time=2014-05-02
  2. [root@zjj101 soft]#

已经生成
hive读取直接放到hdfs的数据,将目录加载到分区表中 - 图2

将数据上传到hdfs上面

shell:

  1. [root@zjj101 soft]# hadoop fs -put /root/soft/order_created.txt /user/hive/warehouse/order_partition/event_time=2014-05-02
  2. [root@zjj101 soft]#

查看数据是否上传成功

hive读取直接放到hdfs的数据,将目录加载到分区表中 - 图3
此时查看已经有了

关联元数据再查询

sql

  1. -- 刚刚给数据放到hdfs上面了,但是元数据没有,所有需要修复一下再执行查询语句,否则的话是查询不到的
  2. msck repair table order_partition;
  3. -- 执行查询语句
  4. select *
  5. from order_partition
  6. where event_time = '2014-05-02';

hive读取直接放到hdfs的数据,将目录加载到分区表中 - 图4