hive数据导入的6种方式


1.hadoop fs -put的方式

语法:hadoop fs -put 数据文件名 HDFS目录 的形式暴力导入。【不太推荐】

hadoop fs -put students.txt /home/hadoopUser/apps/hive/warehouse/myhive1029.db/stu1029/
在这里插入图片描述

2.load的方式

可查看hive的官方文档

LOAD DATA [LOCAL] INPATH ‘filepath’ [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 …)]

说明:
LOAD操作是单纯的复制或者移动,将数据文件移动到hive表对应的位置。
【local】查找本地linux的filepath位置。
【overwrite】先清空hive表目录下的所有文件,然后再把filepath文件添加进去。

  1. 从本地目录导入数据到hive表,需要添加【local】关键字
    从本地目录复制文件到hive表目录下
    load data local inpath “/home/hadoopUser/文件名” into table 表名;

  2. 从HDFS目录导入数据到hive表,不需要添加【local】关键字
    从HDFS目录剪切文件到hive表目录下
    load data inpath “/HDFS目录/文件名” into table 表名;

3.insert…values的方式

该语法和mysq插入数据的语法一样。一般不常用,可能在测试的时候会用到这种方式。
实际工作中一般数据都是存放在文件中,通过load的方式批量导入到表内。
如果要使用该方法,必须保证hadoop集群已经启动,因为这个语法是将sql语句转化为mapreduce程序交给yarn执行的。

4.insert…select的方式

假如我现在已经有2张表,一张是t1表(空表),一张是mystu表(有数据的表),我想把mystu表筛选出性别为女的数据,放到t1表中。
语法:
insert into table t1 select * from mystu where gender = “女”;

  1. 创建t1表:
    create table t1(id int,name string,gender string,age int) row format delimited fields terminated by “,” lines terminated by “\n”;

    由于是从已有的表中筛选数据放入t1表,已有的表格数据已经进行了分隔,因此在创建t1表可以不用设置分隔字段,直接写
    create table t1(id int,name string,gender string,age int);

  2. 把mystu表中性别为女的数据筛选出来放到t1中:
    insert into table t1 select id,name,gender,age from mystu where gender = “女”;
    在这里插入图片描述
    在这里插入图片描述
    t1表创建的是内部表,t1目录下的文件是select筛选性别为女然后insert进t1的数据文件。
    在这里插入图片描述

5.CTAS的方式(比第4种方式更加简便)

在创建t2表的同时就把mystu筛选的数据导入。
select查询筛选出来的是一张虚表数据,通过下面的语法,将虚表变成一张实表t2。
语法:
create table 表(可加字段)as select…

  • 表字段跟select后的字段一样。

创建t2表,同时把mystu筛选的数据导入t2。
create table t2 as select * from mystu where gender = “女”;
在这里插入图片描述
在这里插入图片描述

6.create views视图的方式(比第5种方式更加简便)

创建视图的时候,as后面sql的语句可以延迟执行。
语法:
create view 表名 as 子查询语句

创建t3_id
create view t3_id as select id,name from mystu;

创建t3_dp
create view t3_dp as select id,department from mystu;

创建这两个视图,子查询select是没有执行的,但是show tables;能够查看到视图,hive仓库目录下也不会有视图信息。
在这里插入图片描述
在这里插入图片描述
当工作中需要多个子查询的时候,create view 比 CTAS 更好用,因为创建视图时,后面的子查询语句没有执行。
而在做一些比如视图的连接查询的时候,此时子查询语句才会一起执行,然后经过hive优化的效率更高。
例子:
select t3_id.* ,t3_dp.* from t3_id join t3_dp on t3_id.id = t3_dp.id;
在这里插入图片描述
执行过后select * from 视图 就有结果。

create views和CTAS区别

  1. create views的时候,子查询语句没有执行。
    但是CTAS是必须执行子查询sql语句的。
  2. 当工作中的需求需要多个sql语句才能执行出来的时候,create views可以把多个sql语句先攒起来不执行,最后通过hive优化后再一起执行,效率更高。
    而CTAS则是每个sql语句都会先执行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章