IT~技术交流群

添加微信号:liudd666haha

备注进群,会拉进交流群

互帮互助,IT之路不孤独!


本篇来源:​  https://liudongdong.top/archives/hiveqi-hive-zhi-shu-ju-dao-ru​

本系列来源:​  https://liudongdong.top/categories/hive​



一、向表中装填数据(load)

1. 语法

hive> load data [local] inpath '数据的 path' [overwrite] into table 
student [partition (partcol1=val1,…)];

  1. load data:表示加载数据
  2. local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表
  3. inpath:表示加载数据的路径
  4. overwrite:表示覆盖表中已有数据,否则表示追加
  5. into table:表示加载到哪张表
  6. student:表示具体的表
  7. partition:表示上传到指定分区

加载数据从本地/hdfs.... 追加或覆盖到哪个表里.......

2. 加载数据(load)

  1. 创建一张表

    hive (default)> create table if not exists load_student(id string, name string)
    > row format delimited fields terminated by '\t';

  2. 加载数据到表中

    hive (default)> load data local inpath '/opt/module/hive/student.txt' into table load_student;
    Loading data to table default.load_student
    OK
    Time taken: 1.899 seconds

  3. 加载hdfs文件到表中

    上传文件到hdfs上

    hive (default)> dfs -put /opt/module/hive/student.txt /hive;

    加载数据到表中

    hive (default)> load data inpath '/hive/student.txt' into table load_student;
    Loading data to table default.load_student
    OK
    Time taken: 0.205 seconds

load data 加载到hdfs文件的数据,相当于剪切

把指定的数据文件,剪切到创建表的目录下

  1. 加载数据覆盖到表中

    # 上传文件到hdfs中
    hive (default)> dfs -put /opt/module/hive/student.txt /hive;
    # 加载hdfs文件数据,覆盖到表中
    hive (default)> load data inpath '/hive/student.txt' overwrite into table load_student;
    Loading data to table default.load_student
    OK
    Time taken: 0.319 seconds

二、通过查询语句向表中插入数据(insert)

  1. 创建表

    hive (default)> create table if not exists insert_student(id string, name string)
    > row format delimited fields terminated by '\t';
    OK
    Time taken: 0.213 seconds

  2. 基本插入数据

    hive (default)> insert into table insert_student values('1','hello'),('2','world');
  3. 基本模式插入(单表)

    追加模式

    hive (default)> insert into table insert_student
    > select id, name from load_student;

    覆盖模式

    hive (default)> insert overwrite table insert_student
    > select id, name from load_student;

insert into:以追加数据的方式插入到表或分区,原有数据不会删除

insert overwrite:会覆盖表中已存在的数据

注意:insert 不支持插入部分字段

  1. 多表(多分区)插入模式(多表)

    hive (default)> from student
    > insert overwrite table load_student
    > select id, name where id = 1001
    > insert overwrite table insert_student
    > select id, name where id = 1002;

    插入结果

    hive (default)> select * from load_student;
    OK
    load_student.id load_student.name
    1001 ss1
    Time taken: 0.083 seconds, Fetched: 1 row(s)
    hive (default)> select * from insert_student;
    OK
    insert_student.id insert_student.name
    1002 ss2
    Time taken: 0.087 seconds, Fetched: 1 row(s)

可以在同一个查询中使用多个insert子句,这样的好处是我们只需要扫描一遍源表就可以生成多个不相交的输出。

三、创建表并加载数据

  1. 创建表并加载数据(as select)
hive (default)> create table if not exists select_student 
> as
> select id, name from student;

2. 创建表并加载hdfs数据

# 上传文件
hive (default)> dfs -put /opt/module/hive/student.txt /hive;

# 创建表并指定路径
hive (default)> create table create_student(id string, name string)
> row format delimited fields terminated by '\t'
> location '/hive';
OK
Time taken: 0.039 seconds

四、Import 数据到指定 Hive 表中

hive (default)> import table student2
>from '/user/hive/warehouse/export/student';

注意:先用 export 导出后,再将数据导入。