Hive学习笔记(五)向表中装载数据
1.向管理表中装载数据
再次强调,Hive没有行级别的数据插入、数据更新和删除操作。
LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
OVERWRITE INTO TABLE employees
PARTITION (country = 'US', state = 'CA');
- 如果分区目录不存在的话,这个命令会先创建分区目录,然后再将数据拷贝到该目录下。
- 如果目标是非分区表,那么语句中应该省略PARTITION子句。
- 如果使用了LOCAL这个关键字,那么这个路径应该为本地文件系统路径。数据将会被拷贝到目标位置。如果省略掉LOCAL关键字,那么这个路径应该为分布式文件系统路径。也就是说,LOAD DATA LOCAL…拷贝本地数据到位于分布式文件系统上的目标位置,而LOAD DATA…转移数据到目标位置。
- 如果用户指定了OVERWRITE关键字,那么目标文件夹中的之前存在的数据将会被先删除掉。如果没有这个关键字,仅仅会把新增的文件追加到目标文件夹中而不会删除之前的数据。然而,如果使用OVERWRITE关键字并且目标文件夹中已经存在和装载的文件同名的文件,那么旧的同名文件将会被覆盖重写。如果没有使用OVERWRITE关键字并且目标文件夹中已经存在和装载的文件同名的文件,那么会保留之前的文件并且会重命名新文件为“之前的文件名_序列号”。
- INPATH子句要求这个路径下不可以包含任何文件夹。
2.通过查询语句向表中插入数据
INSERT语句允许用户通过查询语句向目标表中插入数据。
假设有一个叫staged_employees的表有相关数据了,在表staged_employees中我们使用不同的名字来表示国家和州,分别称作cnty和st。
INSERT OVERWRITE TABLE employees
PARTITION (country = 'US', state = 'CA')
SELECT * FROM staged_employees se
WHERE se.cnty = 'US' AND se.st = 'CA';
- 这里使用了OVERWRITE关键字,因此之前分区的内容(如果是非分区表,就是之前表中的内容)将会被覆盖掉。
- 如果这里没有使用OVERWRITE关键字或者使用INTO关键字替换它的话,那么Hive将会以追加的方式写入文件。
如果表staged_employees非常大,需要向65个州都执行这些语句,那么也就意味着要扫描表staged_employees65次。Hive提供了另一种INSERT语法,可以只扫描一次输入数据,然后按多种方式进行划分。
FROM staged_employees se
INSERT OVERWRITE TABLE employeesPARTITION (country = 'US', state = 'OR')SELECT * WHERE se.cnty = 'US' AND se.state = 'OR'
INSERT OVERWRITE TABLE employeesPARTITION (country = 'US', state = 'CA')SELECT * WHERE se.cnty = 'US' AND se.state = 'CA'
INSERT OVERWRITE TABLE employeesPARTITION (country = 'US', state = 'IL')SELECT * WHERE se.cnty = 'US' AND se.state = 'IL';
- 每个INSERT子句,只要有需要,都可以插入到不同的表中,而那些目标表可以是分区表也可以是非分区表。因此,输入的某些数据可能输出到多个输出位置而其他一些数据可能就被删除掉了!
- 当然,这里可以混合使用INSERT OVERWRITE句式和INSERT INTO句式。
3.动态分区插入(一条语句就可以向N个分区装载数据,很好用)
动态分区的部分属性:
Hive提供了一个动态分区功能,其可以基于查询参数推断出需要创建的分区名称:
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nostrict;
SET hive.exec.max.dynamic.partitions.pernode = 1000;
INSERT OVERWRITE TABLE employees
PARTITION (country,state)
SELECT ..., se.cnty, se.st
FROM staged_employees se;
- Hive根据SELECT语句中最后2列来确定分区字段country和state的值。
- 在表staged_employees中我们使用了不同的命名,就是为了强调源表字段值和输出分区值之间的关系是根据位置而不是根据命名来匹配的。
4.单个查询语句中创建表并加载数据
CREATE TABLE ca_employees
AS SELECT name, salary, address
FROM employees se
WHERE se.state = 'CA';
注意:这个功能不能用于外部表。
5.导出数据
- 如果数据文件恰好是用户需要的格式,那么只需要简单地拷贝文件夹或文件:
hadoop fs -cp source_path target_path
- 否则用户可以使用INSERT…DIRECTORY…:
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'
SELECT name, salary, address
FROM employees se
WHERE se.state = 'CA';
Hive学习笔记(五)向表中装载数据相关推荐
- 数据仓库Hive编程——HiveQL的数据操作(一):向管理表中装载数据
既然Hive没有行级别的数据插入.数据更新和删除操作,那么往表中装载数据的唯一途径就是使用一种"大量"的数据装载操作.或者通过其他方式仅仅将文件写入到正确的目录下. 在<Hi ...
- 编程一五八俱乐部SQL学习笔记-2-mysql建表中的约束
回顾上一笔记: update xxx set ...改 delete from xxx where ...删 select * from xxx查 insert into xxx value()增 一 ...
- 最优化学习笔记(五)——牛顿法(多维数据)
在最优化学习系列中,第一次就说的是牛顿法,但是那是在一维搜索上的,它其实就是将函数ff在xx处利用泰勒公式展开,得到它的近似函数,进而求解最小值.本节内容主要说明牛顿法在多维数据上的迭代公式.最优化学 ...
- SQL学习-向一张表中插入数据来源于另一张表
比如:从另一个数据库的表中查询出数据插入到这张表 INSERT INTO dbo.userInfo (ID,UserName,Age) SELECT ID,UserName,Age FROM anot ...
- Docker学习笔记五 在测试中使用Docker
2019独角兽企业重金招聘Python工程师标准>>> 5.1 使用Docker测试静态网站(Nginx) 将项目命名为Sample 首先建立构建环境 mkdir sample cd ...
- bootstrap学习笔记五(表单一)
表单 bootstrap为表单提供三种样式:默认表单,水平表单,内联表单. <form class="form-horizontal" role="form&quo ...
- CAD二次开发学习笔记五(在ObjectARX中使用MFC)
要实现的功能是: 执行ArxModal命令,弹出如图所示对话框 选择点,则得到点坐标,选择角度则得到角度值. 步骤一: 新建基于MFC的ObjectArx项目, 参考:http://www.cnblo ...
- [MATLAB学习笔记]textread读取文本文件中的数据;写入多个输出
语法 [A,B,C,...] = textread(filename,format) [A,B,C,...] = textread(filename,format,N) [...] = textrea ...
- loadrunner 操作mysql_loadrunner学习笔记(从MYSQL中取数据)
先声明,目前属于学了没几天的新手,以下部分都是自己研究加上网上资料所得,如果有问题请各位达人指出. 前一阵子写了一段调用MYSQL的测试代码.功能很简单,就是从数据库里取数据,然后打印出来.算是为以后 ...
最新文章
- 算法训练 素因子去重
- Java高并发程序设计前言
- IoC反转控制初步认识
- (31)System Verilog验证计划及策略
- 【Yii框架系列一】Yii中CDbCriteria常用总结
- 字符串--验证回文串
- Hidden (NOIP模拟赛)(字符串模拟QAQ)
- 创建一个新数组并指定数组的长度
- python执行adb命令_Python脚本之ADB命令(一)
- 南京师范大学会计专硕考研上岸经验分享
- 一寸照纯红色底图片_纯红色背景
- Windows命令行快速启动快捷方式
- html制作古诗网页早发白帝城,《早发白帝城》古诗词
- struts2从入门到精通
- 论文翻译之Enriched Feature Guided Refinement Network for Object Detection
- Android性能优化--IO 优化( IO基本知识:应用程序、文件系统和磁盘,三种IO方式及适用场景,多线程阻塞IO和NIO)
- silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发)
- freemaker导出Excel文件用WPS能打开,而用office打不开
- Linux如何关闭防火墙?
- 那些被岁月遗忘的UNIX经典著作
热门文章
- manjaro 折腾总结
- 如何以数据推动下一代电商的变革
- 大学生用Python兼职五天狂赚1200,方法经验分享,让你早日实现财富自由
- 每日一题:字符串系列---判断一个字符串是否是对称字符串 * 例如“abc“不是对称字符串,“aba“、“abba“、“aaa“、“mnanm“是对称字符串
- oracle 12c pdb 备份,12c PDB备份与恢复初体验
- mysql易百_MySQL Replace语句
- 定时闹钟功能(带铃声 可延时)
- 职场人怎样提高说话技巧
- mysql极客_极客mysql38
- OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “C:\ProgramData\Anaconda3\lib\site-packages\to