hive-2 数据加载方式

标签: hive 数据 加载 | 发表时间:2014-12-17 19:43 | 作者:chengjianxiaoxue
出处:http://www.iteye.com


1 hive数据加载方式:
a) 使用load加载
b) 用查询语句向表中插入数据

 

 

a) 使用LOAD DATA方式加载数据详解:
命令格式如下

LOAD DATA 【LOCAL】 INPATH ‘....’ 【OVERWRITE】 INTO TABLE t1 【PARTITION (...)】
eg: load data local inpath '/usr/local/data/user' into table jiuye partition(grade='1');   

 

以上内容中,方括号中的表示可选部分。分别解释以下:
LOCAL 表示从本地加载数据,即Linux文件系统,这时数据会复制到HDFS的Hive仓库中;如果不使用LOCAL,指的是数据从HDFS的某个路径移动到Hive仓库中。
OVERWRITE指的是否覆盖原始数据。如果不使用OVERWRITE,但是已经导入过这批数据,那么新的导入依然能够成功,即产生两份,而不是覆盖掉原来的那一份
PARTITION指的是导入到指定分区表中。

 

b) 使用查询语句向表中插入数据详解:

INSERT OVERWRITE TABLE t1 SELECT * FROM t2; // 也可以不覆盖,直接导入,把关键词OVERWRITE替换为INTO即可
数据加载到一个分区中写法:
INSERT OVERWRITE TABLE t2 PARTITION (day=2) SELECT * FROM t1;//将t1表的数据加载到分区为day=2的表t2中
数据同时加载到多个分区中/或者同时加载到多个表中(数据源只有一个) 
可以这么写:
INSERT OVERWRITE TABLE t2 PARTITION (day=2) SELECT * FROM t1;
INSERT OVERWRITE TABLE t2 PARTITION (day=3) SELECT * FROM t1;
.....
这么写的坏处是SELECT * FROM t1每一次都会进行一次遍历,这样耗时,

将t1中day=2的id写入到表t2的分区day=2文件夹下的文件中
将t1中day=3的id写入到表t2的分区day=3文件夹下的文件中
将t1中day=4的id写入到表t4中
改进写法:(只扫描一次原始表,高效)
FROM t1  
INSERT OVERWRITE TABLE t2 PARTITION(day=2) SELECT id WHERE day=2    
INSERT OVERWRITE TABLE t2 PARTITION(day=3) SELECT id WHERE day=3 
INSERT OVERWRITE TABLE t4 SELECT id WHERE day=4 

 

c) 动态分区插入:

插入数据时,分区数据是动态的,不是如上面静态写死的,
默认,Hive是支持动态分区插入的。如果不支持的话,可以设置  hive.exec.dynamic.partition=true;打开

动态分区插入语法如下
set  hive.exec.dynamic.partition=true;
set  hive.exec.dynamic.partition.mode=nonstrict;
set  hive.exec.max.dynamic.partitions.pernode=1000;
INSERT OVERWRITE TABLE t2 PARTITION (province, city) SELECT ....... , a.province, a.city FROM a;

注意:
动态分区字段一定要放在所有静态字段的后面,这里业务字段在前,最后 a.province, a.city作为动态分区字段会被赋到PARTITION (province, city)中
INSERT OVERWRITE TABLE t2 PARTITION (province, city) SELECT  业务字段 , a.province, a.city FROM a;

 

d) 动静态分区插入结合使用:

INSERT OVERWRITE TABLE t2 PARTITION (province=’beijing’, city) SELECT ....... , a.city FROM a;
此时,SELECT ....... ,  都是作为业务字段被赋值到t2表中的,而 a.city则是作为动态分区字段查询到后赋值到 t2的分区字段中的。

 

 

2 hive数据导出方式:

 

一是直接使用HDFS命令导出文件夹。
二是使用如下语法
insert overwrite local directory ‘/tmp/t1’ SELECT id FROM t1; // directory表示存放目录
// 将t1的id数据导出到本地磁盘文件 /tmp/t1中

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hive 数据 加载] 推荐:

hive-2 数据加载方式

- - 互联网 - ITeye博客
1 hive数据加载方式:. b) 用查询语句向表中插入数据. a) 使用LOAD DATA方式加载数据详解:. LOAD DATA 【LOCAL】 INPATH ‘....’ 【OVERWRITE】 INTO TABLE t1 【PARTITION (...)】 eg: load data local inpath '/usr/local/data/user' into table jiuye partition(grade='1');.

同步mysql数据到hive

- - ITeye博客
地址为:http://archive.cloudera.com/cdh/3/下载相应版本,如sqoop-1.2.0-CDH3B4.tar.gz. 地址为:http://archive.cloudera.com/cdh/3/,版本可以为hadoop-0.20.2-CDH3B4.tar.gz. 3.解压 sqoop-1.2.0-CDH3B4.tar.gz ,hadoop-0.20.2-CDH3B4.tar.gz 到某目录如/home/hadoop/,解压后的目录为.

从hbase(hive)将数据导出到mysql

- - CSDN博客云计算推荐文章
在上一篇文章《 用sqoop进行mysql和hdfs系统间的数据互导》中,提到sqoop可以让RDBMS和HDFS之间互导数据,并且也支持从mysql中导入到HBase,但从HBase直接导入mysql则不是直接支持,而是间接支持. 要么将HBase导出到HDFS平面文件,要么将其导出到Hive中,再导出到mysql.

深入学习《Programing Hive》:数据压缩

- - 互联网 - ITeye博客
Hive使用的是Hadoop的文件系统和文件格式,比如TEXTFILE,SEQUENCEFILE等.          在Hive中对中间数据或最终数据数据做压缩,是提高数据吞吐量和性能的一种手段. 对数据做压缩,可以大量减少磁盘的存储空间,比如基于文本的数据文件, 可以将文件压缩40%或更多,同时压缩后的文件在磁盘间传输和I/O也会大大减少;当然压缩和解压缩也会带来额外的CPU开销,但是却可以节省更多的I /O和使用更少的内存开销.

[转][转]使用 Hive 构建数据库

- - heiyeluren的blog(黑夜路人的开源世界)
当您需要处理大量数据时,存储它们是一个不错的选择. 令人难以置信的发现或未来预测不会来自未使用的数据. 用 Java™ 编程语言编写复杂的 MapReduce 程序要耗费很多时间、良好的资源和专业知识,这正是大部分企业所不具备的. 这也是在 Hadoop 上使用诸如 Hive 之类的工具构建数据库会成为一个功能强大的解决方案的原因.

【转载】Hive 数据倾斜总结

- - SQL - 编程语言 - ITeye博客
转载:http://www.tbdata.org/archives/2109. 几个比较特殊的点都提到了,大家可以作为参考. 在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显. 主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,而由于数据倾斜的原因造成map处理数据量的差异过大,使得这些平均值能代表的价值降低.

Hive几种导出数据方式

- - 编程语言 - ITeye博客
如果数据文件恰好是用户需要的格式,那么只需要拷贝文件或文件夹就可以. --不能使用insert into local directory来导出数据,会报错. --只能使用insert overwrite local directory来导出数据. --hive0.11版本之前,只能使用默认分隔符^A(ascii码是\00001).

hive-数据倾斜解决详解

- - ITeye博客
hive在跑数据时经常会出现数据倾斜的情况,使的作业经常reduce完成在99%后一直卡住,最后的1%花了几个小时都没跑完,这种情况就很可能是数据倾斜的原因,解决方法要根据具体情况来选择具体的方案. 1、join的key值发生倾斜,key值包含很多空值或是异常值. 这种情况可以对异常值赋一个随机值来分散key.

Sqoop导入关系数据库到Hive

- - 开源软件 - ITeye博客
文章来自:http://blog.javachen.com/2014/08/04/import-data-to-hive-with-sqoop/. Sqoop 是 apache 下用于 RDBMS 和 HDFS 互相导数据的工具. 本文以 mysql 数据库为例,实现关系数据库导入到 hdfs 和 hive.

Sqoop实现关系型数据库到hive的数据传输

- - CSDN博客互联网推荐文章
Sqoop实现关系型数据库到hive的数据传输. 作者:zyuc_wangxw 发表于2013-8-9 17:21:20 原文链接. 阅读:118 评论:0 查看评论.