hive dml语法
Loading files into tables
语法
1 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
2
3 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)
概要
在Hive 3.0版本之前的load操作都是纯粹的copy/move操作:move datafiles into locations corresponding to Hive tables
- filepath:
- 相对路径: project/data1
- 绝对路径:/user/hive/project/data1
- URI: hdfs://namenode:9000/user/hive/project/data1
- 被加载的目标位置可以是表或分区,如果是分区必须指定所有分区的具体值(有多少分区就要写多少个分区)
- filepath可以是具体的文件,也可以是文件夹,如果是文件夹,hive将会移动该文件夹下的所有文件到hive表中
- 如果指定了关键字LOCAL
- 将会在本地系统寻找filepath,如果是相对路径,将会被认为是相对于用户工作目录相当于:file:///user/hive/project/data1
- 注意:如果是在HiveServer2上操作改指令,filepath将引用HiveServer2上的路径,HiveServer2必须有改文件的访问权限
- 没有指定关键字LOCAL
- filepath没有指定schema(如HDFS://),将会读取HADOOP中配置的fs.default.name来指定 Namenode URI
- filepath不是绝对路径,Hive认为是相对于/user/<username>
- 如果使用了OVERWRITE关键字,目标表或表分区的内容将会被删除,并被替换成filepath指定的内容
对于 INSERT AS SELECT这样额外的load操作在Hive 3.0 及之后版本支持,因为Hive 内部需要重写load
如果表中有分区,但是load指令中没有指定,load方式将会转成INSERT AS SELECT,并认为最后的colums是分区的columns,如果文件不符合期待的模式,将会出错
- filepath 可以包含子文件目录,其中的子文件都需符合schema
- inputformat 可以是hive的任何输入格式 text, ORC等
- serde 可以和Hive的SERDE关联
- inputformat 和serde都区分大小写
Inserting data into Hive Tables from queries
语法
1 # 标准语法:
2 INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;
3 INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
4
5 # 扩展内容(多个insert):
6 FROM from_statement
7 INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1
8 [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2]
9 [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
10 FROM from_statement
11 INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1
12 [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2]
13 [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;
14
15 Hive extension (dynamic partition inserts):
16 INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;
17 INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;
摘要
- INSERT OVERWRITE 将会覆盖表或分区中的任何存在的额数据
- 除非使用 IF NOT EXISTS ,不会插入新的数据,也不回删除原始数据(hive 0.9.0)
- hive 版本2.3.0,如果设置表属性TBLPROPERTIES ("auto.purge"="true") ,当运行INSERT OVERWRITE 时,原先的数据不会被扔到垃圾堆中,该设置适合管理表
- INSERT INTO将会追加到表或分区中,保留存在数据的完整性(HIVE 0.8)
- hive(0.13.0)之后,建表时指定TBLPROPERTIES ("immutable"="true"),表可以被设置成不可改变 :当表中没有数据时,可以插入;当表中存在数据时,通过insert into追加数据无效,但是INSERT OVERWRITE仍然起作用
- 目前OVERWRITE 关键字是强制的,也就是说表或分区中的内容会被关联的查询输出内容替代,需要确保查询语句的输出字段内容和目标表字段顺序完全一致
- hive(0.14)如果表的OutputFormat实现了AcidOutputFormat,INSERT OVERWRITE操作无效,可以用TRUNCATE TABLE(对于没有分区表)或者DROP PARTITION 加INSERT INTO 实现
- hive(1.1.0),TABLE关键字可以不用写
- hive(1.2.0), INSERT INTO T可以指定列顺序(INSERT OVERWRITE 不支持),如INSERT INTO T (z, x, c1),查看举例
动态分区插入
- 动态分区插入时,用户可以给部分分区的说明,也就是说只需要指定分区的分区名即可分区的值可选。
- 如果给定了分区的值,成为静态分区,否则是动态分区。
- 每个动态分区的列名和查询的statement中的列名关联且是最后数量的相同顺序的列,意味着动态分区的创建由输入列的值决定。
- hive(0.9.0)版本后动态分区默认开启,动态分区插入相关配置如下
|
Configuration property |
Default |
Note |
|---|---|---|
|
|
|
Needs to be set to |
|
|
|
In |
|
|
100 |
Maximum number of dynamic partitions allowed to be created in each mapper/reducer node |
|
|
1000 |
Maximum number of dynamic partitions allowed to be created in total |
|
|
100000 |
Maximum number of HDFS files created by all mappers/reducers in a MapReduce job |
|
|
|
Whether to throw an exception if dynamic partition insert generates empty results |
举个例子:
1 FROM page_view_stg pvs
2 INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country)
3 SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, null, null, pvs.ip, pvs.cnt
country分区会由最后的字段(pvs.cnt)创建,提示:名称没有被使用,只使用了其中的值,在nonstrict模式中dt分区也可以被动态创建
Writing data into the firesystem from queries
Inserting values into tables from SQL
Update
Delete
Merge
hive dml语法的更多相关文章
- Hadoop Hive sql语法详解
Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...
- Hive SQL 语法学习与实践
Hive 介绍 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供 ...
- HIVE基本语法以及HIVE分区
HIVE小结 HIVE基本语法 HIVE和Mysql十分类似 建表规则 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name da ...
- [Phoenix] 三、DML语法
摘要: 云HBASE上Phoenix支持的DML语法 从一个或者多个表中查询数据.LIMIT(或者FETCH FIRST) 在ORDER BY子句后将转换为top-N查询. 云HBASE上Phoeni ...
- Hive基本语法操练
建表规则如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment ...
- Hive 6、Hive DML(Data Manipulation Language)
DML主要是对Hive 表中的数据进行操作的(增 删 改),但是由于Hadoop的特性,所以单条的修改.删除,其性能会非常的低所以不支持进行级操作: 主要说明一下最常用的批量插入数据较为常用的方法: ...
- Hive 基本语法操练(三):分区操作和桶操作
(一)分区操作 Hive 的分区通过在创建表时启动 PARTITION BY 实现,用来分区的维度并不是实际数据的某一列,具体分区的标志是由插入内容时给定的.当要查询某一分区的内容时可以采用 WHER ...
- Hive 官方手册翻译 -- Hive DML(数据操纵语言)
由 Confluence Administrator创建, 最终由 Lars Francke修改于 八月 15, 2018 原文链接 https://cwiki.apache.org/confluen ...
- Hive SQL语法总结
Hive是一个数据仓库基础的应用工具,在Hadoop中用来处理结构化数据,它架构在Hadoop之上,通过SQL来对数据进行操作. Hive 查询操作过程严格遵守Hadoop MapReduce 的作业 ...
随机推荐
- 使用Beyond Compare对比大篇幅文件的小技巧
我们在编辑较大篇幅的文章时,无可避免地要经过多次的修改.有时候修改的版本过多时,我们很可能就会记不清最新版的文章对比上一版的文章,究竟修改了哪些地方.但有了Beyond Compare(Windows ...
- 用CorelDRAW来制作产品结构图的方法
一.产品结构图的重要性 随着我国经济不断的高速发展,大家的生活水平不断提高,我们将会在生活生产中越来越多的,遇到许多各种各样的生产产品和生活消费品.科技的飞速进步,更是使这些产品.消费品包含了很强的科 ...
- 怎么让我们的mac运行得更加流畅?让我们得工作事半功倍!
古语云:"工欲善其事,必先利其器."因此,一个运行流畅的Mac更能使我们的工作事半功倍.但又是什么导致电脑的运行不流畅呢? 其实这大多还是缓存垃圾过多.内存不足的原因.尝试安装了许 ...
- 加密PDF文件,提高文件安全性
PDF文件的一大优点是可以设置文件的安全性,不仅可以通过证书加密的形式加密文件,还可以通过pdfFactory来设置密码的形式加密文件. 我们可以通过两种方式开启"PDF加密"来为 ...
- iOS7使用iOS8上的方法报错处理
问题描述 我们经常会遇到在低版本上使用高版本方法导致的bug,例如: WebKit discarded an uncaught exception in the webView:decidePolic ...
- yii2.0 curl的使用
yii2 curl的使用办法 get: use linslin\yii2\curl; public function actionCurl($value =0) { $url = 'http://ya ...
- 第四章:动态规划I
4.1背包问题 动态规划的核心:如何构造一个高效的备忘录,提高整个问题求解的效率. 4.2最大子数组问题II
- 超稳攻略!Rancher 2.3手动轮换证书,保护集群安全!
本文转自Rancher Labs 前 言 Rancher 2.3正式发布已经一年,第一批使用Rancher 2.3的用户可能会遇到Rancher Server证书过期,但是没有自动轮换的情况.这会导致 ...
- GoLang 自学系列(二)—— defer
defer 关键字 首先来看官网的定义: A "defer" statement invokes a function whose execution is deferred to ...
- Java之选择排序(正序、逆序)
public class SelectSort { public static void main(String[] args) { /** * @author JadeXu * @// TODO: ...