首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【挑战30万年薪】Hive语句详解之DML操作【元数据存储】

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

如果觉得对你有所帮助。记得收藏和关注呦!(每日更新各种大数据框架)

如需转载请注明出处(创作不易请见谅)

和巨婴程序猿一起成长。让自己变得更优秀

想了解更多精彩内容,快来关注跟着巨婴去逆袭

我最近一直在思考(大数据通俗讲解)的问题,你的看法是什么呢?关注我快说出来一起交流一下吧~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200704A0EG9N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券