HiveSQL MDL 加载数据、INSERT、Update、Delete

Hive SQL MDL Load 加载数据

  • load是将数据移动到Hive表对应的位置,移动时是纯复制或移动操作,Hive不会对表中数据内容进行任何转换和操作。

Load 加载数据语法

  • filepath表示待移动数据的路径。可以指向文件,也可以指向目录。
  • filepath支持三种形式:
  1. 相对路径:project/data
  2. 绝对路径:/user/hive/project/data
  3. 具有schema的完整URI:hdfs://namenode:9000/user/hive/project/data
  • 指定LOCAL,将在本地文件系统查找文件路径,此时是复制操作。
  • 没有指定LOCAL,此时是移动操作。
  • 没有指定LOCAL时,若filepath指向的是一个完整的URI,则直接使用这个URI;若没有指定schema,Hive会使用hadoop配置文件中参数fs.defualt.name指定的(一般是HDFS)
  • LOCAL的本地文件系统指的是Hive server2服务所在机器的本地Linux文件系统,不是Hive客户端所在的本地文件系统。
  • 若使用了OVERWRITE关键字,则目标表中已存在的数据会被覆盖,然后再将filepath指向的文件添加到表中。
# [INPUTFORMAT 'inputformat' SERDE 'serde'] 是Hive3.0后版本支持
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION(partcol1=val1,partcol2=val2...)][INPUTFORMAT 'inputformat' SERDE 'serde']

Hive3.0加载数据特性

  • Hive3.0+,load加载数据除了移动和复制之外,还会将加载重写为INSERT AS SELECT。
  • Hive3.0+,还支持inputformat、SerDe指定输入格式。
  • 若表具有分区,而load命令没有指定分区,则将load转换为INSERT AS SELECT,并假定最后一组列为分区列,若文件不符合预期,则报错。

Hive INSERT

  • 底层是用MR执行引擎,速度很慢。
INSERT INTO table_name(字段列表) VALUES (值列表);

INSERT + SELECT

  • insert+select表示将后面查询返回结果作为内容插入到指定表中。
  • 也可以用于动态分区。
  • 字段名应一致。
INSERT INTO TABLE student_from_insert SELECT * FROM student;

多重插入

  • 一次扫描,多次插入。
  • 例:扫描一次student表,选择num和name分别插入表student_insert1和student_insert3。
FROM student 
INSERT OVERWRITE TABLE student_insert1 
SELECT num
INSERT OVERWRITE TABLE student_insert2
SELECT name;

动态分区插入

  • 动态分区插入指的是分区值是由后续的SELECT语句查询结果来动态确定的。
  • 相关语法可见动态分区表的创建。

INSERT DIRECTORY导出数据

  • Hive支持将SELECT查询的结果导出成文件存放在文件系统中。
  • 导出操作是一个覆盖操作,会覆盖路径目标文件。
  • directory1 是目标文件路径
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 [ROW FORMAT row_format][STORED AS file_format] SELECT ... FROM ...;
  • 例:导出时指定分隔符和文件存储格式
INSERT OVERWRITE DIRECTORY '/tmp/hive_export/e1' 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORC
SELECT * FROM student; 

Hive SQL MDL Update

  • 对事务表进行update操作
  • update事务完成前查询不到update的结果。
UPDATE trans_student 
SET age = 20
WHERE id = 1;

Hive SQL MDL Delete

  • 对事务表进行delete操作
DELETE FROM trans_student WHERE id = 1;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值