Hive 之数据导入

485 阅读2分钟

数据导入

Hive 可以理解是让人使用 SQL 表的方式去管理 HDFS 上的文件,那么 Hive 有一个很重要的操作就是把数据和表关联起来,即数据导入。数据导入通常有以下 4 种方法:

  • LOAD: 加载文件数据到表
  • INSERT:直接插入数据
  • CTAS:建表时插入
  • LOCATION:移动数据文件

0.准备数据

建表

hive> create table student(id string, name string) row format delimited fields terminated by '\t';

数据文件 $ vim students.txt(注意 id 和 name 之间用 Tab 键)

1       Jack
2       Rose
3       Ada
4       Reiser

1.LOAD

LOAD DATA 是直接将文件加载到 Hive 中,语法如下:

LOAD DATA [LOCAL] INPATH '...' OVERWRITE|INTO TABLE tb_name [PARTITION (pcol1=val1)];

LOCAL 表示本地文件路径,不加表示文件路径为 HDFS。OVERWRITE 表示覆盖之前的数据,INTO 表示数据追加。PARTITION 制定分区。 例子:

hive>LOAD DATA LOCAL INPATH '/home/hadoop/students.txt' INTO TABLE student;

2.INSERT

INSERT 如同 SQL 中的分区,语法如下:

INSERT INTO TABLE tb_name PARTITION(pcol1=val1)) VALUES(val1,val2);

PARTITION 为指定分区,VALUES是一行依此填写的值,例子:

hive> INSERT INTO TABLE student VALUES(5,'Jedi');
VALUES 可替换为查询结果,如:

单查询结果:

hive> INSERT OVERWRITE TABLE student PARTITION(month='201912')
            SELECT id, name FROM student WHERE month='201911';

多查询结果:(FROM tb_name 放到最前面)

hive> FROM student
             INSERT OVERWRITE TABLE student PARTITION(month='201910)
             SELECT id, name WHERE month='201912'
             INSERT OVERWRITE TABLE student PARTITION(month='201909')
             SELECT id, name WHERE month='201912';

3.AS SELECT CTAS

CTAS 就是 create table as select , 即建表的时候用查询结果作为数据:

hive> CREATE TABLE  student3 AS SELECT id, name FROM student;

4.LOCATION

还有一种方式是建表的时候就指定文件路径,后续将文件直接放入到该目录下。比如将 Spark 的结果文件放置该目录下,这样就可以直接通过 Hive 查询了。

 create table if not exists student4(
              id int, name string)
      row format delimited fields terminated by '\t'
      location '/user/hive/warehouse/student4';

注意:如果有 partition ,需要手动修复元数据

set hive.msck.path.validation=ignore;
MSCK REPAIR TABLE table_name;