Hive 分区表 与 数据 关联的三种方式

说明

分区表本质是 HDFS 上的文件夹,所以直接通过HDFS创建好文件,再使用 Hadoop命令 把数据上传到该目录,直接使用 select * from 表名 查看,是没有数据的,因为
文件夹里的数据Hive 的元数据没有关联起来。

# 直接创建目录 直接上传分区 然后查询没有表
hive> dfs -mkdir /user/hive/warehouse/test.db/hive_db/mouth=01;
hive> dfs -put /root/student.txt /user/hive/warehouse/test.db/hive_db/mouth=01;
hive> select * from hive_db;
OK
Time taken: 0.099 seconds

mark

关联的第一种方式( 最常用的 )

使用 load data local inpath '文件' into table 分区表名 partition(指定分区)

hive> load data local inpath '/root/student.txt' into table hive_db partition(mouth=01);
Loading data to table test.hive_db partition (mouth=1)
Partition test.hive_db{mouth=1} stats: [numFiles=1, numRows=0, totalSize=21, rawDataSize=0]
OK
Time taken: 0.553 seconds
hive> select * from hive_db;
OK
1    Bob    1
2    Black    1
3    Jeck    1
Time taken: 0.136 seconds, Fetched: 3 row(s)

关联的第二种方式

使用修复命令,修复分区表 msck repair table 分区表名;

hive> msck repair table hive_db;
OK
Partitions not in metastore:    hive_db:mouth=01
Repair: Added partition to metastore hive_db:mouth=01
Time taken: 0.211 seconds, Fetched: 2 row(s)

关联的第三种方式

使用添加分区命令,添加一下分区
语法:alter table 分区表名 add partition(指定分区);

hive> alter table hive_db add partition(mouth="03");
OK
Time taken: 0.238 seconds
hive> select * from hive_db where mouth=03;
OK
1    Bob        3
2    Black    3
3    Jeck    3
Time taken: 0.107 seconds, Fetched: 3 row(s)
发表评论 / Comment

用心评论~