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

hive.exec.dynamic.partition

true

Needs to be set to true to enable dynamic partition inserts

hive.exec.dynamic.partition.mode

strict

In strict mode, the user must specify at least one static partition in case the user accidentally overwrites all partitions, in nonstrict mode all partitions are allowed to be dynamic

hive.exec.max.dynamic.partitions.pernode

100

Maximum number of dynamic partitions allowed to be created in each mapper/reducer node

hive.exec.max.dynamic.partitions

1000

Maximum number of dynamic partitions allowed to be created in total

hive.exec.max.created.files

100000

Maximum number of HDFS files created by all mappers/reducers in a MapReduce job

hive.error.on.empty.partition

false

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语法的更多相关文章

  1. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  2. Hive SQL 语法学习与实践

    Hive 介绍 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供 ...

  3. HIVE基本语法以及HIVE分区

    HIVE小结 HIVE基本语法 HIVE和Mysql十分类似 建表规则 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name da ...

  4. [Phoenix] 三、DML语法

    摘要: 云HBASE上Phoenix支持的DML语法 从一个或者多个表中查询数据.LIMIT(或者FETCH FIRST) 在ORDER BY子句后将转换为top-N查询. 云HBASE上Phoeni ...

  5. Hive基本语法操练

    建表规则如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment ...

  6. Hive 6、Hive DML(Data Manipulation Language)

    DML主要是对Hive 表中的数据进行操作的(增 删 改),但是由于Hadoop的特性,所以单条的修改.删除,其性能会非常的低所以不支持进行级操作: 主要说明一下最常用的批量插入数据较为常用的方法: ...

  7. Hive 基本语法操练(三):分区操作和桶操作

    (一)分区操作 Hive 的分区通过在创建表时启动 PARTITION BY 实现,用来分区的维度并不是实际数据的某一列,具体分区的标志是由插入内容时给定的.当要查询某一分区的内容时可以采用 WHER ...

  8. Hive 官方手册翻译 -- Hive DML(数据操纵语言)

    由 Confluence Administrator创建, 最终由 Lars Francke修改于 八月 15, 2018 原文链接 https://cwiki.apache.org/confluen ...

  9. Hive SQL语法总结

    Hive是一个数据仓库基础的应用工具,在Hadoop中用来处理结构化数据,它架构在Hadoop之上,通过SQL来对数据进行操作. Hive 查询操作过程严格遵守Hadoop MapReduce 的作业 ...

随机推荐

  1. C# 中的本地函数

    今天我们来聊一聊 C# 中的本地函数.本地函数是从 C# 7.0 开始引入,并在 C# 8.0 和 C# 9.0 中加以完善的. 引入本地函数的原因 我们来看一下微软 C# 语言首席设计师 Mads ...

  2. 一次看完28个关于ES的性能调优技巧,很赞,值得收藏!

    因为总是看到很多同学在说Elasticsearch性能不够好.集群不够稳定,询问关于Elasticsearch的调优,但是每次都是一个个点的单独讲,很多时候都是case by case的解答,本文简单 ...

  3. 面试BAT必问的JVM,今天我们来说一说它类加载器的底层原理

    类加载器的关系 类加载器的分类 JVM支持两种类加载器,一种为引导类加载器(Bootstrap ClassLoader),另外一种是自定义类加载器(User Defined ClassLoader) ...

  4. 深度分析:Redis 的数据结构及其使用场景分析,原来这么简单?

    Redis基础数据结构有哪些? 一.String(字符串) 在任何一种编程语言里,字符串String都是最基础的数据结构, 那你有想过Redis中存储一个字符串都进行了哪些操作嘛? 在Redis中St ...

  5. guitar pro系列教程(二十七):Guitar Pro教程之理解记谱法

    前面的章节我们讲解了很多关于Guitar Pro'的功能使用,今天小编还是采用图文结合的方式为大家讲解它的理解记谱法,对于很多新人来说,在我们看谱之前,我们肯定要先熟悉他的一些功能如何使用以及一些关于 ...

  6. guitar pro系列教程(二十五):Guitar Pro教程之组织小节

    上一章节我们讲述了关于Guitar Pro 7的主界面的相关功能的介绍,对于初学作曲,又是吉他的初学者,刚刚接触Guitar Pro时,很多的功能,符号,工具都市不熟悉的,这样在创作,使用的过程中就会 ...

  7. symfony框架中使用service

    在config文件里面的service.yml写入自己service 1 chat.group_list: //service的名字 2 class: Chat\Service\GroupListSe ...

  8. 【模板】【P3605】【USACO17JAN】Promotion Counting 晋升者计数——动态开点和线段树合并(树状数组/主席树)

    (题面来自Luogu) 题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训--牛是可怕的管理者! 为了方便,把奶牛从 1⋯N(1≤N≤100,000) 编号,把公司组织成一棵树 ...

  9. 测试:ADB

    配置 JAVA: 1.安装jdk的按抓包(傻瓜式安装不需要更改路径) 2.我的电脑右击属性--高级系统设置--环境变量--用户变量--新建:JAVA_HOME C:\Program Files\Jav ...

  10. day3(使用axios实现登录成功)

    1.创建一个login.vue页面 1.1写页面components/Login.vue 在 src/components 下创建 Login.vue 页面 <template>   &l ...