Hive是”库表空间”和”文件空间”的映射关系。
**
hive中每个分区表对应着多个文件,这多个文件散落在不同机子上,你每次读取某张表的某个分区的数据,就是和存有这个分区数据的机子建立网络通讯后从那台机子把数据下载下来的过程。
我们对Hive表的增删改查的过程,就是对文件进行”增删改查”的过程。
举个例子。
select * from yuque.hour_action_log where d = '2020-01-01';
当我们执行这条SQL语句的时候,我们从yueque.hour_action_log这张表中 ‘2020-01-01’ 对应的d分区对应的若干个文件中读取到数据并呈现到终端/IDE。
insert overwrite table yuque.hour_action_log partition (d = '2020-01-01')
select d,uid from yuque.consumer_info where substr(ordertime,0,10) = '2020-01-01';
当我们执行这条SQL语句的时候,我们从yuque.consumer_info这张表对应的文件中,读取 ordertime 字段中前十位字符为’2020-01-01’的数据,将他们写入(overwrite表示刷新该分区数据) yuque.hour_action_log 满足 d = ‘2020-01-01’ 的分区对应的若干个文件中。
drop table yuque.hour_action_log_temp;
当我们执行这条SQL语句的时候,我们删除的是yuque.hour_action_log_temp这张表对应的文件。
表面上看起来是删除的表,其实是删除了文件。
truncate table yuque.new_user_info_temp;
当我们执行这条SQL语句的时候,我们把 yuque.new_user_info_temp 这张表对应的文件内的数据清空了。
EXPORT TABLE yuque.table1 TO '/user/hive/datawarehouse/yuque/table1';
当我们执行这条SQL语句的时候,我们把 yuque.table1对应的数据写入 hdfs文件路径 “/user/hive/datawarehouse/yuque/table1”,可以在hdfs的webUI上看到该文件。
当我们要把Hive库/表从一个服务器迁移到的另一个服务器的时候,我们是把库/表对应的hdfs文件进行迁移(主流用distcp)。
