Hive常用DML操作

一、加载文件数据到表

1.1 语法

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

使用建议:

  • 不论是本地路径还是 URL 都建议使用完整的

  • 加载对象是分区表时建议显示指定分区

1.2 示例

新建分区表:

  CREATE TABLE emp_ptn(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    PARTITIONED BY (deptno INT)   -- 按照部门编号进行分区
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

从 HDFS 上加载数据到分区表:

二、查询结果插入到表

2.1 语法

可以将 SELECT 语句的查询结果插入多个表(或分区),称为多表插入。语法如下:

2.2 动态插入分区

在向分区表插入数据时候,分区列名是必须的,但是列值是可选的。如果给出了分区列值,我们将其称为静态分区,否则它是动态分区。动态分区列必须在 SELECT 语句的列中最后指定,并且与它们在 PARTITION() 子句中出现的顺序相同。

2.3 示例

  1. 新建 emp 表,作为查询对象表

​ 完成后 emp 表中数据如下:

  1. 为清晰演示,先清空 emp_ptn 表中加载的数据:

  1. 静态分区演示:从 emp 表中查询部门编号为 20 的员工数据,并插入 emp_ptn 表中,语句如下:

  1. 接着演示动态分区:

三、使用SQL语句插入值

  • 使用时必须为表中的每个列都提供值。不支持只向部分列插入值(可以为缺省值的列提供空值来消除这个弊端);

  • 如果目标表表支持 ACID 及其事务管理器,则插入后自动提交;

  • 不支持支持复杂类型 (array, map, struct, union) 的插入。

四、更新和删除数据

4.1 语法

更新和删除的语法比较简单,和关系型数据库一致。需要注意的是这两个操作都只能在支持 ACID 的表,也就是事务表上才能执行。

五、查询结果写出到文件系统

5.1 语法

5.2 示例

Last updated