Hadoop Hive基础SQL语法(DML 操作:元数据存储)

2. DML操作:元数据存储


hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。

DML包括:INSERT插入、UPDATE更新、DELETE删除
•向数据表内加载文件
•将查询结果插入到Hive表中
•0.8新特性 insert into

2.1.0 向数据表内加载文件

LOAD DATA [LOCAL] INPATH ‘路径’ [OVERWRITE] INTO TABLE 表名 [PARTITION (partcol1=val1, partcol2=val2 …)]

  • Load 操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置。
  • filepath
    •相对路径,例如:project/data1
    •绝对路径,例如: /user/hive/project/data1
    •包含模式的完整 URI,例如:hdfs://namenode:9000/user/hive/project/data1
    例如:
LOAD DATA INPATH '/data/in/2013/11/15/00/20' INTO TABLE in_table PARTITION(ds='2013-11-15-00-00');
  • OVERWRITE:
    OVERWRITE:会覆盖已经存在的数据,我们假设要插入的数据和已经存在的N条数据一样,那么插入后只会保留一条数据;
    INSERT INTO:只是简单的copy插入,不做重复性校验,如果插入前有N条数据和要插入的数据一样,那么插入后会有N+1条数据;

2.1.1 加载本地数据,同时给定分区信息

•加载的目标可以是一个表或者分区。如果表包含分区,必须指定每一个分区的分区名
•filepath 可以引用一个文件(这种情况下,Hive 会将文件移动到表所对应的目录中)或者是一个目录(在这种情况下,Hive 会将目录中的所有文件移动至表所对应的目录中)

  • LOCAL关键字
    •指定了LOCAL,即本地
    •load 命令会去查找本地文件系统中的 filepath。如果发现是相对路径,则路径会被解释为相对于当前用户的当前路径。用户也可以为本地文件指定一个完整的 URI,比如:file:///user/hive/project/data1.
    •load 命令会将 filepath 中的文件复制到目标文件系统中。目标文件系统由表的位置属性决定。被复制的数据文件移动到表的数据对应的位置。

例如:加载本地数据,同时给定分区信息:

hive> 
LOAD DATA LOCAL INPATH '/var/local/hadoop/falcon-0.9/data/in/2013/11/15/00/25/' OVERWRITE INTO TABLE in_table PARTITION(ds='20');

• 没有指定LOCAL
如果 filepath 指向的是一个完整的 URI,hive 会直接使用这个 URI。 否则
•如果没有指定 schema 或者 authority,Hive 会使用在 hadoop 配置文件中定义的 schema 和 authority,fs.default.name 指定了 Namenode 的 URI
•如果路径不是绝对的,Hive 相对于 /user/ 进行解释。 Hive 会将 filepath 中指定的文件内容移动到 table (或者 partition)所指定的路径中。

2.1.2 加载DFS数据,同时给定分区信息:

hive> LOAD DATA INPATH '文件路径' OVERWRITE INTO TABLE 表名 PARTITION (分区字段='分区值');

OVERWRITE
•指定了OVERWRITE
•目标表(或者分区)中的内容(如果有)会被删除,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中。
•如果目标表(分区)已经有一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文件所替代。

2.1.3 将查询结果插入Hive表

•基本模式

INSERT OVERWRITE TABLE 表名 [PARTITION (分区字段=分区值, 分区字段=分区值, …)] select 字段名,字段名(注意:不能为’*’号,因为’*’号包括了分区字段) FROM 表名 WHERE 条件;

•多插入模式

FROM 源数据表名
INSERT OVERWRITE TABLE1 目的数据表名 [PARTITION (分区字段=分区值, 分区字段=分区值 …)] SELECT条件语句
INSERT OVERWRITE TABLE2 目的数据表名 [PARTITION (分区字段=分区值, 分区字段=分区值 …)] SELECT条件语句

•自动分区模式

INSERT OVERWRITE TABLE 表名PARTITION (分区字段名, 分区字段名,…) select * (可以使用) FROM 表名;

2.1.4 将查询结果写入HDFS文件系统

INSERT OVERWRITE [LOCAL] DIRECTORY ‘文件路径’ SELECT … FROM …

FROM 源数据表名 
INSERT OVERWRITE [LOCAL] DIRECTORY ‘路径名’  SELECT条件语句
INSERT OVERWRITE [LOCAL] DIRECTORY ‘路径名’  SELECT条件语句;

•数据写入文件系统时进行文本序列化,且每列用^A 来区分,\n换行

2.1.6 INSERT INTO

INSERT INTO TABLE 表名 [PARTITION (分区字段=分区值, 分区字段=分区值 …)] select 字段名,字段名。。。 FROM 表名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NobiGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值