使用 Hive装载数据的几种方式

装载数据

1、以LOAD的方式装载数据

LOAD DATA [LOCAL] INPATH ‘filepath‘ [OVERWRITE] INTO TABLE tablename [PARTITION(partcol1=val1, partcol2=val2 ...)]

1) 使用LOCAL这个关键字,那么这个路径应该为本地文件系统路径,是拷贝本地数据到位于HDFS上的目标位置,而不使用LOCAL这个关键字,那么这个路径应该为HDFS中的路径,是把本身就在HDFS上的数据转移到目标位置。 同时,因为文件是以这种方式移动的,Hive要求源文件和目标文件以及目录应该在同一个文件系统中,不可以使用LOAD DATA 语句将数据从一个集群的HDFS中转移到另一个集群的HDFS中。

2) 如果使用OVERWRITE 关键字,那么目标文件夹中之前存在的数据将会删除,如果没有这个关键字,而目标文件夹中已经存在同名的文件时,会保留之前的文件并且会重新命名新文件为“之前的文件名_序列号”(这是在Hive v0.9.0版本中修复的,之前的版本是有同名的文件会被覆盖重写)。

3) 如果目标表是分区表那么需要使用PARTITION 的子句,而且还必须为每个分区的键指定一个值。

4) 对于 INPATH 子句使用的文件路径不可以包含任何文件夹。

5) Hive不会验证装载的数据和表的模式是否匹配,而会验证文件格式是否和表结构定义的一致。如,表创建时定义的存储格式是sequencefile,那么转载进去的文件也应该是sequencefile 格式的文件。

2、通过SELECT 语句向表中插入数据

insert overwrite table user_install_status2 partition (dt=‘20141117‘)

select aid,pkgname,uptime,type,country,gpcategory from

user_install_status

where dt=‘20141117‘;

1)使用了OVERWRITE 关键字,因此之前分区的内容将会被覆盖掉。而不使用OVERWRITE 或者使用INTO替换掉OVERWRITE 的话,那么Hive将会以追加的方式写入数据(这是在Hive v0.8.0版本才有的)。

2) 如果分区特别的多会多次扫描表进行插入数据,非常耗费资源。可以用下面的方式只扫描一次表就把所有的分区的数据进行插入。

FORM user_install_status

insert overwrite table user_install_status2 partition (dt=‘20141117‘)

select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141117‘

insert overwrite table user_install_status2 partition (dt=‘20141118‘)

select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141118‘

insert overwrite table user_install_status2 partition (dt=‘20141119‘)

select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141119‘

insert overwrite table user_install_status2 partition (dt=‘20141120‘)

select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141120‘;

3、动态分区插入

insert overwrite table user_install_status2 partition (dt)

select ....., dt

from user_install_status ;

1)Hive 是根据SELECT 语句的最后一列来确定分区字段dt 的值。

2)动态分区默认情况下没有开启,要通过设置如下两个参数来开启

set hive.exec.dynamic.partition=true? 开启动态分区

set hive.exec.dynamic.partition.mode=nonstrict?设为非严格模式执行,严格模式要求至少一个分区字段是静态的

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

create table user_install_status3 as

select aid, pkgname, uptime, type, country, gpcategory

from user_install_status

where dt=‘20141228‘;

1) 这种做法往往是从一个大的数据集中抽取一个小的数据集。

2)这种做法不能用于外部表。

时间: 2024-10-14 03:28:17

使用 Hive装载数据的几种方式的相关文章

hive 导入数据的四种方式

Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中. 一.从本地文件系统中导入数据到Hive表 先在Hive里面创建好表,如下: hive> create table wyp > (id int, name string, > age int, tel string) >

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com

ios网络学习------4 UIWebView的加载本地数据的三种方式

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBund

向服务器传json数据的两种方式

接触到了向服务器传JSON数据,那么怎么把参数以JSON的形式,传到服务器呢.下面来说说,json字符串的得到方法.一共有两种方式来得到Json的字符串.当然,向服务器上传,不能传字符串,是要转成NSData的,也就是二进制的形式.这个在此不讨论,只说,怎么得到json的字符串. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //第一种方法,是把要传的参数

SpringMVC返回json数据的三种方式

SpringMVC返回json数据的三种方式:http://blog.csdn.net/shan9liang/article/details/42181345 上述第三种方法:可能会出现这个jar包没有的情况,引入即可,下面pom引入即可 java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

获取数据库增量数据的几种方式

获取数据库增量数据的几种方式 a.触发器:在要抽取的表上建立需要的触发器,一般要建立插入.修改.删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除.触发器方式的优点是数据抽取的性能较高,缺点是要求业务表建立触发器,对业务系统有一定的影响. b.时间戳:它是一种基于快照比较的变化数据捕获方式,在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值.当进行数据抽取时,通过比较系统时

【代码笔记】向服务器传JSON数据的两种方式

一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //第一种方法,是把要传的参数组合成一个数组,然后由JSONKit把字典转为字符串 NSDictionary* jsonDic = [NSDictionary dictionaryWithObjectsAndKeys:@"李华",@"name",@"女&quo

联接HIVE SERVER客户端的三种方式

在Hive/bin 目录下输入./hive --service hiveserver 代表hive启动了服务器模式. 和普通模式不同的是,这时hive同时启动了一个名为thrift的服务器. 你不用去研究这个服务器的原理,认为他是一个传递信息的人就好,你可以通过他向hive发送命令,然后hive再把命令送给hadoop. 1.命令行模式: ./hive -h127.0.0.1 -p10000 简单明了,IP和端口. 2.JDBC模式: 名字很糊人的.     private static Str

django获取单表数据的三种方式

django获取单表数据的三种方式 v1 = models.Business.objects.all() # QuerySet ,内部元素都是对象 v2 = models.Business.objects.all().values('id','caption') # QuerySet ,内部元素都是字典 v3 = models.Business.objects.all().values_list('id','caption') # QuerySet ,内部元素都是元组 def business(