第5章 HiveQL:数据操作

第4章主要介绍如何创建表,随之而来的下个问题即,如何装载数据到这些表中。
本章主要讨论Hive查询语言中,向表中装载数据和从表中抽取数据到文件系统的数据操作语言部分。

5.1 向管理表中装载数据

既然H没有行级别的数据插入、数据更新和删除操作,那么往表中装载数据的唯一途径就是使用一种“大量”的数据装载操作。
LOAD DATA LOCAL…拷贝本地数据到位于分布式文件系统上的目标位置,而LOAD DATA…转移数据到目标位置。
因为文件是以这种方式移动的,Hive要求源文件和目标文件以及目录应该在同一个文件系统中。例如,用户不可以使用LOAD DATA 语句将数据从一个集群的HDFS中装载到另一个集群的HDFS中。
如果用户指定了OVERWRITE关键字,那么目标文件夹中之前存在的数据将会被删除掉。
如果目标表是分区表那么需要使用PARTITION子句,而且用户必须为每个分区的键指定一个值。
Hive并不会验证用户装载的数据和表的模式是否匹配。然而,Hive 会验证文件格式是否和表结构定义的一致。例如,如果表在创建时定义的存储格式是SEQUENCEFILE,那么转载进去的文件也应该是sequencefile格式才行。

5.2 通过查询语句向表中插入数据

INSERT 语句允许用户通过查询语句向目标表中插入数据。
依旧使用前章中表employees作为例子,这里假设另一张名为staged_employees的表已经有相关数据了,在staged_employees表中分别使用cnty和st表示国家和州。

INSERT OVERWRITE TABLE employees
PARTITION (country='US',state='OR')
SELECT * FROM staged_employees se
WHERE se.cnty = 'US' AND se.st = 'OR'

OVERWRITE :之前分区中的内容会被覆盖;
INTO :追加写入数据,而不会覆盖;
应用场景:数据已经存在于某个目录下,对 Hive 来说是一个外部表,而现在想将其导入到最终的分区表中。如果用户想把源表数据导入到一个具有不同记录格式的目标表,可以使用这种方法。
思考:如果staged_employees表非常大,而且用户需要对65个州都执行这些语句,那么意味这要需要扫描staged_employees表65次!Hive提供了另一种INSERT语法,可以只扫描一次输入数据,然后按多种方式进行划分。下例显示了如何为3个州创建表employees分区:

FROM staged_employees se
INSERT OVERWRITE TABLE employeesPARTITION ( country = 'US' , state = 'OR')SELECT * WHERE se.cnty = 'US' AND se.st = 'OR')
INSERT OVERWRITE TABLE employeesPARTITION ( country = 'US' , state = 'CA')SELECT * WHERE se.cnty = 'US' AND se.st = 'CA')
INSERT OVERWRITE TABLE employeesPARTITION ( country = 'US' , state = 'IL')SELECT * WHERE se.cnty = 'US' AND se.st = 'IL')

从staged_employees表中读取的每条记录都会经过一条 SELECT…WHERE…子句进行判断。
通过这个结构,源表中的某些数据可以被写入到目标表的多个分区中或者不被写入任一分区中。
动态分区插入
问题:前面的语法,如果需要创建非常多的分区,那么用户需要写非常多的SQL!因此可以使用Hive提供的一个动态分区功能。

INSERT OVERWRITE TABLE employees
PARTITION (country , state)
SELECT ...,se.cnty,se.st
FROM staged_employees se

Hive 根据SELECT语句中最后2列来确定分区字段country和state的值。源表字段值和输出分区值之间的关系是根据位置而不是根据命名来匹配
假设表stage_employees中共有100个国家和州的话,执行完上面的这个查询后,表employees将会有100个分区!

用户也可以混合使用动态和静态分区。如下例中指定了country字段的值为静态的US,而分区字段state是动态值:

INSERT OVERWRITE TABLE employees
PARTITION (country = 'US',state)
SELECT ...,se.cnty,se.st
FROM staged_employees se
WHERE se.cnty = 'US'

静态分区键必须出现在动态分区键之前
动态分区属性

属性名称 缺省值 描述
hive.exec.dynamic.partition false 设置成true,表示开启动态分区功能
hive.exec.dynamic.partition.mode strict 设置成nonstrict,表示允许所有分区都是动态的
hive.exec.max.dynamic.partitions.pernode 100 每个mapper和reducer可以创建的最大动态分区个数。如果某个mapper或者reducer尝试创建大于这个值的分区的话会抛出一个致命错误信息
hive.exec.max.dynamic.partitions +1000 一个动态分区创建语句可以创建的最大动态分区个数。如果超过这个值会抛出一个致命错误信息
hive.exec.max.created.files 100000 全局可以创建的最大文件个数。有一个Hadoop计数器会跟踪记录创建了多少个文件,如果超过这个值会抛出一个致命错误信息

5.3 单个查询语句中创建表并加载数据

用户同样可以在一个语句中完成创建表并将查询结果载入这个表的操作:

CREATE TABLE ca_employees
AS SELECT name,salary,address
FROM employees
WHERE se.state = 'CA'

这个功能常见情况是从一个大的宽表中选取部分需要的数据集。

5.4 导出数据

Hive学习—数据操作相关推荐

  1. Hive Cilent数据操作

    Hive Cilent数据操作 Hive运行命令方式有cli,jdbc.hwi.beeline.而我们经常使用的往往是cli shell 操作. cli shell hive -help hive - ...

  2. Hive学习(三)操作Hive的方式及优化

    Hive 一.操作Hive的两种方式 1.通过Beenline 2.通过JDBC 二.Hive的优化 1.Hive优化的思想: 2.优化的方式 (1)开启本地模式 (2)开启并行计算 (3)严格模式 ...

  3. Hive最新数据操作详解(超级详细)

    数据操作能力是大数据分析至关重要的能力.数据操作主要包括:更改(exchange),移动(moving),排序(sorting),转换(transforming).Hive提供了诸多查询语句,关键 ...

  4. Java学习-数据操作高级篇

    一.封装类(包装类) 1.数字封装类:Byte,Short,Integer,Long,Float,Double ,这些类都是抽象类Number的子类: 2.基本类型转封装类 方法1:通过构造方法: i ...

  5. hive mysql类型,(二)Hive数据类型、数据定义、数据操作和查询

    1.数据类型 1.1 基本数据类型Hive数据类型长度例子TINYINT1byte有符号整数20 SMALINT2byte有符号整数20 INT4byte有符号整数20 BIGINT8byte有符号整 ...

  6. 认识Hive,以及Hive的数据定义与数据操作,hive的数据查询和hive函数

    认识Hive 为什么要出现hive 前面知识我们讲到mapreudce计算框架,各位需要通过java编码的形式来实现设计运算过程,这对各位的编程能力提出了更高的要求,难道没有门槛更低的方式来实现运算的 ...

  7. HiveQL数据操作

    文章目录 Hive--HiveQL数据操作 1.向管理表中插入数据 2.通过查询语句向表中插入数据 3.单个查询语句中创建表并加载数据 4.导出数据 Hive--HiveQL数据操作 1.向管理表中插 ...

  8. hive学习笔记-数据操作

    hive数据操作 hive命令行操作 hive -d --define <key=value> 定义一个key-value可以在命令行中使用 hive -d database <da ...

  9. Hive之DDL数据操作

    Hive之DDL数据操作 目录 数据导入 数据导出 清除表中数据 1. 数据导入 1. 向表中装载数据(Load) 语法 hive> load data [local] inpath '/opt ...

最新文章

  1. SEL | 植物通过根系分泌物招募假单孢菌协助抵抗地上部病原菌侵染
  2. 摄像头(Ov965x)驱动分析
  3. 无法打开 源 文件 pch.h_outlook 客户端数据文件无法打开,如何解决?
  4. Versant 对象型数据库
  5. mysql表空间界限_MySQL5.7 import表结构报错超出表空间界限
  6. bootstrap 导航栏 字体 颜色_设计自己的Hugo主题——开发导航栏
  7. Swing 线程之SwingUtilities.invokeLater()
  8. 拓端tecdat|自然语言处理NLP:主题LDA、情感分析疫情下的新闻文本数据
  9. xposed微信模块源代码
  10. k8s学习:kubeconfig文件详解
  11. [渝粤教育] 南京师范大学 会计学基础 参考 资料
  12. php针式打印机打多张,如何将多页内容打印在一张A4纸上
  13. 高等代数第3版下 [丘维声 著] 2015年版_全国硕士研究生入学统一考试管理类联考综合能力考试大纲(2021年版)...
  14. ARM一面(二轮技术面)
  15. 小米路由器青春版刷潘多拉、华硕固件
  16. 计算机word基础操作知识点,计算机WORD知识点整理
  17. python 自动下载脚本_Python实现115网盘自动下载的方法
  18. Windows中如何修改Intel网卡的注册表使Wireshark可以抓取802.1q tag包
  19. 如何用ID批量排版图片
  20. Remote Dictionary Server(Redis)——基于 KV 结构的作为 Cache 使用的 NoSQL 数据库管理系统

热门文章

  1. GBase 8a 数据查询性能
  2. org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘****‘
  3. Python代码搜索并下载酷狗音乐
  4. keras 训练 loss和acc可视化
  5. Python开发环境部署详细教程,附上免费Python开发平台
  6. Python学习笔记3-Python开发工具
  7. R语言 样本相似性可视化
  8. LIBSVM (三) 葡萄酒种类识别
  9. 最令我。。。。的一首诗
  10. 什么 语言适合写3D游戏