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. pikachs 渗透测试2-XSS漏洞及利用

    一.概述 XSS(跨站脚本)概述 Cross-Site Scripting 简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XS ...

  2. 如何使用ABBYY FineReader 处理无法识别的字符?

    在识别PDF文档时,我们可能会遇到文档中存在多种语言.多种不同类型文字字符的情况.在ABBYY FineReader 15(Windows系统)OCR文字识别软件的默认语言数据下,可能无法识别PDF文 ...

  3. 有什么OCR文字识别软件好用?

    OCR文字识别是指:对文本资料进行扫描,然后对图像文件进行分析处理,最后获取文字以及版面信息的过程.对于许多学生党而言,一款好用的文字识别软件,能节省很多抄笔记的时间,而对于许多处理文字内容的白领而言 ...

  4. ppt-1 操作界面与基本操作

    1.Ctrl+N快速建立新文档 2.新模板:文件--新建--可免费搜索.下载新模板 3.恢复未保存的演示文稿 文件--打开(首先看到的是近期使用的演示文稿,)--鼠标滚动至末尾,可看到"恢复 ...

  5. Jmeter (三)变量、参数化、函数

    一.参数化 1.在参数中定义变量:${变量名称} 变量定义:2种 2.在用户自定义变量User Defined Variable 或者 用户参数User Parameters中,设置key.value ...

  6. 【电子取证:FTK Imager篇】FTK Imager制作镜像详细介绍

    FTK Imager制作镜像详细介绍 以DD镜像制造为例,详细介绍了FTK Imager创建镜像的过程,记得大学的时候学习这些没什么教程,找到的资料也是语焉不详,故在此啰嗦一番---[suy] 一.磁 ...

  7. Java集合【9】-- Vector源码解析

    目录 1.Vector介绍 2. 成员变量 3. 构造函数 4. 常用方法 4.1 增加 4.2 删除 4.3 修改 4.4 查询 4.5 其他常用函数 4.6 Lambda表达式相关的方法 4.7 ...

  8. kafka入门之broker-集群管理

    依赖于zookeeper,broker向zk中注册的信息以json格式保存,其中包括: 1.listener_security_protocol_map:此值指定了该broker与外界通信所用的安全协 ...

  9. Happy Tree Friends——团队展示

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 团队名称 Happy Tree Friends 这个作业要求在哪里 团队作业第一次 这个作业的目标 团队合作 作业正文 正文 其 ...

  10. argparse使用范例

    if __name__ == "__main__": # https://docs.python.org/zh-cn/dev/library/argparse.html impor ...