DML操作:
hive不支持用insert语句一句一句的进行插入操作,也不支持update操作。
数据是以load的方式加载到建立好的表中。
数据一旦导入就不能进行修改。
DML包括什么?
插入:INSERT 更新:UPDATE 删除:DELETE
向数据表内加载文件
将查询结果插入到Hive中
insert into
向数据表内加载数据
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol = val,partcol1 = val1 ,....)]
解释:
LOAD 将数据文件移动到Hive表对应位置 。
filepath
相对路径,例如:project/data1
绝对路径,例如:/user/hive/project/data1
包含模式的完整URL地址,例如:hdfs://namenode:9000/user/hive/project/data1
加载本地数据,并且给定分区信息:
加载的目标可以是一个表或者分区
如果表包含分区,就必须指定每一个分区的分区名
filepath可以引用一个文件(Hive会将文件移动到对应目录)或者一个目录
LOCAL关键字:
指定了LOCAL,及本地
load命令去查找本地文件系统中的filepath
如果发现是相同的路径,则会被解释为该用户的当前路径
用户也可以为本地文件指定一个完整的URL,如:file:///user/hive/project/data1.
load 命令会将filepath中的文件复制到目标文件系统中。
目标文件系统由表的位置属性决定。
被复制的数据文件移动到表的数据对应位置。
例如:加载本地数据,同时给定分区信息:
LOAD DATA LACAL INPATH './file/test.txt' OVERWRITE INTO TABLE invites PARTITION (DS = '2020-07-04');
解释:
没有指定LOCAL,如果filepath指向是一个完整的URL,hive会直接使用这个url。
如果没有指定schema或者authority,Hive会使用在Hadoop配置文件定义的schema和authority,fs.default.name指定了Namenode的url
如果路径不说绝对的,Hive相对于/user/进行操作。Hive会将filepath中的文件移动到table或者partition所指定的路径中。
加载DFS数据,同时给定分区信息
LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION(ds='2020-07-04); The above command will load data from an HDFS file/directory to the table.Note that loading data from HDFS will result in moving the file/directory.As a result,the operation is almost instantaneous.
OVERWRITE
指定overwrite
目标表或者分区中的内容如果有会被删除,然后再将filepath指向文件/目录的内容加载到表/分区中。
如果表/分区已经有一个文件,并且文件名和filepath中的文件名冲突,那么现有的文件会被新文件代替覆盖。
将查询结果插入Hive表中:
将查询结果插入Hive表
将查询结果写入HDFS文件系统
基本模式
INSERTOVERWRITE TABLE tablename1[PARTITION(partcol1=val1,partcol2=val2...)]
select_statement1 FROM from_statement
多插入模式
FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION(partcoli=vall,partcol2=val2....)] select statementi [INSERT OVERWRITE TABLE tablename2 [PARTITION..] select_ statement2].…
自动分区模式
INSERT OVERWRITE TABLE tablename PARTITION(partcol1[=val1],partcol2[=val2]...)select_statement FROM from_statement
将查询结果写入HDFS文件系统:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT..…FROM..… FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_ statement1 [INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2]
数据写入文件系统时进行文本序列化,且每列用~A来区分,n换行
INSERT INTO
INSERT INTO TABLE tablename1 [PARTITION(partcol1=val1,partcol2=val2..…)] select_ statement1 FROM from_statement
如果觉得对你有所帮助。记得收藏和关注呦!(每日更新各种大数据框架)
如需转载请注明出处(创作不易请见谅)
和巨婴程序猿一起成长。让自己变得更优秀
想了解更多精彩内容,快来关注跟着巨婴去逆袭
我最近一直在思考(大数据通俗讲解)的问题,你的看法是什么呢?关注我快说出来一起交流一下吧~
领取专属 10元无门槛券
私享最新 技术干货