大数据技术 HIVE数据操作
沉沙 2018-09-27 来源 : 阅读 1776 评论 0

摘要:本篇教程探讨了大数据技术 HIVE数据操作,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术 HIVE数据操作,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<

Hive数据操作

1.向管理表中装载数据

hive没有行级别数据插入、数据更新和删除操作。
采用“大量”的数据装载操作,或者通过其它方式仅仅将文件写入到正确目录下。
LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
OVERWRITE INTO TABLE employees
PARTITION (country='US', state='CA');
 
关于PARTITION:

如果分区目录不存在,该命令会先创建分区,然后将数据拷贝到该分区目录。
如果目标表为非分区表,需要省略PARTITION子句。  

关于LOCAL:

LOAD DATA LOCAL......拷贝本地数据到位于分布式文件系统上的目标位置。
LOAD DATA......转移数据到目标位置。

关于OVERWRITE:

若有该关键字,目标文件夹中之前存在的数据会先被删除。
若没有该关键字,会把新增的文件增加到目标文件夹中而不会删除之前的。
若目标文件夹中存在和装载的文件同名文件,旧的文件将会被覆盖重写。

 
2.通过查询语句向表中插入数据
 
  一次创建一个分区语法:
 
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_emplyees非常大,用户需要对65个州都执行这些语句,那就意味着要扫描staged_employees 65次,所以可以采用另一各INSERT语法,例子中显示了如何为3个州创建表employees分区:
FROM stage_employees se
INSERT OVERWRITE TABLE employees
PARTITION (country='US',state='OR')
SELECT * WHERE se.cnty='US' AND se.st= 'OR'
INSERT OVERWRITE TABLE employees
PARTITION (country='US',state='CA')
SELECT * WHERE se.cnty='US' AND se.st= 'CA'
INSERT OVERWRITE TABLE employees
PARTITION (country='US',state='IL')
SELECT * WHERE se.cnty='US' AND se.st= 'IL';

当然这里可以混合使用INSERT OVERWRITE 或INSERT INTO句式。

 
  动态分区插入语法:
 
根据前边语法,当创建非常多的分区时,就需要写非常多的SQL,所以hive提供了动态分区功能,前边用到的属于静态分区。
动态分区语法如下:
INSERT OVERWRITE TABLE employees
PARTITION (country,state)
SELECT ..., se.cnty,se.st
FROM staged_employees se;

HIVE根据SELECT语句中最后2列确定分区字段country和state的值。这就是为什么在表staged_employees中我们使用了不同的命名,是为了强调源表字段值和输出分区值之间的关系是根据位置而不是根据命名来匹配的。
假设表staged_employees中有100个国家和州的话,执行完上述语句后,表employees就会有100个分区。

 
  动态分区和静态分区混合使用语法:
 
动态分区功能默认情况下未开户,开启后默认是“严格”模式执行,该模式下要求至少有一列分区字段是静态的。这样设计有助于防止因设计错误导致查询产生大量的分区。
动态分区属性:


属性设置:


属性查看:


混合使用语法:
INSERT OVERWRITE TABLE employees
PARTITION (country='US',state)
SELECT ..., se.cnty,se.st
FROM staged_employees se;
WHERE se.cnty='US';

动态分区键必须在静态分区键之后。


3.单个查询语句创建并加载数据
 
CREATE TABLE ca_employees
AS SELECT name,salary,address
FROM employees
WHERE se.state ='CA';

该功能常用于从一个大的宽表中选取部分需要的数据集。
该功能不能用于外部表。


4.导出数据
 
数据文件恰好与用户需要格式一致时,直接拷贝:
hadoop fs -cp source_path target_path
 
否则,可使用INSERT...DIRECTORY...:
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'
SELECT name,salary,address
FROM employees
WHERE se.state='CA';
 
同向表中插入数据,也可导出文件到多个文件夹目录:
FROM staged_employees se
INSERT OVERWRITE DIRECTORY '/tmp/or_employees'
SELECT * WHERE se.cty='US' and se.st='OR'
INSERT OVERWRITE DIRECTORY '/tmp/or_employees'
SELECT * WHERE se.cty='US' and se.st='CA'
INSERT OVERWRITE DIRECTORY '/tmp/or_employees'
SELECT * WHERE se.cty='US' and se.st='IL'
 
   

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved