一、创建表
在官方的wiki里,example是这样的:
- CREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name
- [(col_namedata_type[COMMENTcol_comment],...)]
- [COMMENTtable_comment]
-
[PARTITIONEDBY(col_namedata_type
- [COMMENTcol_comment],...)]
-
[CLUSTEREDBY(col_name,col_name,...)
-
[SORTEDBY(col_name[ASC|DESC],...)]
-
INTOnum_bucketsBUCKETS]
- [ROWFORMATrow_format]
-
[STOREDASfile_format]
- [LOCATIONhdfs_path]
View Code
[ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符;
[STORED AS file_format]关键字是用来设置加载数据的数据类型。Hive本身支持的文件格式只有:Text File,Sequence File。如果文件数据是纯文本,可以使用 [STORED AS TEXTFILE]。如果数据需要压缩,使用 [STORED AS SEQUENCE] 。通常情况,只要不需要保存序列化的对象,我们默认采用[STORED AS TEXTFILE]。
那么我们创建一张普通的hive表,hive sql就如下:
- CREATETABLEtest_1(idINT,nameSTRING,citySTRING)SORTEDBYTEXTFILEROWFORMATDELIMITED
FIELDS TERMINATED BY ‘\t’;
其中,hive支持的字段类型,并不多,可以简单的理解为数字类型和字符串类型,详细列表如下:
- TINYINT
-
SMALLINT
-
INT
-
BIGINT
- BOOLEAN
-
FLOAT
-
DOUBLE
- STRING
注意partitioned by 的位置:
create table webdata2(vstart string,vend string,hdid int,userid int,sid int,refsid int,active int,duration int,mdomain string,sdomain string,refsdomain string,ieid int,refieid string,url string,totaltime int,param2 int,param4 string,param4code
string) partitioned by(pid int,daytime string) row format delimited fields terminated by '\t' stored as SEQUENCEFILE;
Hive的表,与普通关系型数据库,如mysql在表上有很大的区别,所有hive的表都是一个文件,它是基于Hadoop的文件系统来做的。
hive总体来说可以总结为三种不同类型的表。
1.普通表
普通表的创建,如上所说,不讲了。其中,一个表,就对应一个表名对应的文件。
2.外部表
EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。具体sql如下:
- CREATEEXTERNALTABLEtest_1(idINT,nameSTRING,citySTRING)SORTEDBYTEXTFILEROW
FORMAT DELIMITED FIELDS TERMINATED BY'\t’LOCATION‘hdfs://http://www.cnblogs.com/..’
3.分区表
有分区的表可以在创建的时候使用 PARTITIONED BY 语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。而且,表和分区都可以对某个列进行 CLUSTERED BY 操作,将若干个列放入一个桶(bucket)中。也可以利用SORT BY 对数据进行排序。这样可以为特定应用提高性能。具体SQL如下:
- CREATETABLEtest_1(idINT,nameSTRING,citySTRING)PARTITIONEDBY(ptSTRING)SORTEDBYTEXTFILEROW
FORMAT DELIMITED FIELDS TERMINATED BY‘\t’
Hive的排序,因为底层实现的关系,比较不同于普通排序,这里先不讲。
桶的概念,主要是为性能考虑,可以理解为对分区内列,进行再次划分,提高性能。在底层,一个桶其实是一个文件。如果桶划分过多,会导致文件数量暴增,一旦达到系统文件数量的上限,就杯具了。哪种是最优数量,这个哥也不知道。
分区表实际是一个文件夹,表名即文件夹名。每个分区,实际是表名这个文件夹下面的不同文件。分区可以根据时间、地点等等进行划分。比如,每天一个分区,等于每天存每天的数据;或者每个城市,存放每个城市的数据。每次查询数据的时候,只要写下类似 where pt=2010_08_23这样的条件即可查询指定时间得数据。
总体而言,普通表,类似mysql的表结构,外部表的意义更多是指数据的路径映射。分区表,是最难以理解,也是最hive最大的优势。之后会专门针对分区表进行讲解。
二、加载数据
Hive不支持一条一条的用insert语句进行插入操作,也不支持update的操作。数据是以load的方式,加载到建立好的表中。数据一旦导入,则不可修改。要么drop掉整个表,要么建立新的表,导入新的数据。
官方指导为:
- LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]
Hive在数据load这块,大方向分为两种方式,load文件或者查询一张表,或者将某张表里的额查询结果插入指定表。
如果划分更细一点个人归纳总结为4种不同的方式的load:
1.Load data到指定的表
直接将file,加载到指定的表,其中,表可以是普通表或者分区表。具体sql如下:
- LOADDATALOCALINPATH'/home/admin/test/test.txt'OVERWRITEINTOTABLEtest_1
关键字[OVERWRITE]意思是是覆盖原表里的数据,不写则不会覆盖。
关键字[LOCAL]是指你加载文件的来源为本地文件,不写则为hdfs的文件。
其中
‘/home/admin/test/test.txt’为绝对路径
2.load到指定表的分区
直接将file,加载到指定表的指定分区。表本身必须是分区表,如果是普通表,导入会成功,但是数据实际不会被导入。具体sql如下:
- LOADDATALOCALINPATH'/home/admin/test/test.txt'OVERWRITEINTOTABLEtest_1PARTITION(pt=’xxxx)
load数据,hive支持文件夹的方式,将文件夹内的所有文件,都load到指定表中。Hdfs会将文件系统内的某文件夹路径内的文件,分散到不同的实际物理地址中。这样,在数据量很大的时候,hive支持读取多个文件载入,而不需要限定在唯一的文件中。
3.insert+select
这个是完全不同于文件操作的数据导入方式。官方指导为:
- Standardsyntax:
-
INSERTOVERWRITETABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1FROMfrom_statement
- Hiveextension(multipleinserts):
-
FROMfrom_statement
-
INSERTOVERWRITETABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1
-
[INSERTOVERWRITETABLEtablename2[PARTITION...]select_statement2]...
-
Hiveextension(dynamicpartitioninserts):
-
INSERTOVERWRITETABLEtablenamePARTITION(partcol1[=val1],partcol2[=val2]...)select_statementFROMfrom_statement
这个的用法,和上面两种直接操作file的方式,截然不同。从sql语句本身理解,就是把查询到的数据,直接导入另外一张表。这个暂时不仔细分析,之后查询章节,再细讲。
4.alter 表,对分区操作
在对表结构进行修改的时候,我们可以增加一个新的分区,在增加新分区的同时,将数据直接load到新的分区当中。
- ALTERTABLEtable_nameADD
-
partition_spec[LOCATION'location1']
-
partition_spec[LOCATION'location2']...
分享到:
相关推荐
本学习笔记主要聚焦于HiveSQL中的窗口函数,这是进行复杂数据分析的重要工具。 窗口函数允许我们在一个数据集上进行计算,而不仅仅是基于单行记录,而是基于一个“窗口”内的多行数据。这个窗口可以是当前行及其...
“Hive搭建使用笔记”可能包含了实践过程中的注意事项、常见问题及其解决方案,是学习过程中宝贵的参考资料。 通过这个压缩包,你可以全面掌握Hive的基础知识,包括安装、配置、表管理和SQL操作。实践是学习最好的...
### Hive学习笔记(更新版) #### 一、Hive简介 Hive 是一款构建于 Hadoop 之上的数据仓库工具,旨在提供一种简单易用的方法处理存储在 Hadoop 文件系统 (HDFS) 中的大量数据集。它允许用户使用类似于 SQL 的语言...
### Hadoop Hive 入门学习笔记 #### 一、Hadoop Hive 概述 Hadoop Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,使得 Hadoop 上的数据可以被...
Hive 是一种基于 Hadoop 的数据仓库工具,它允许用户使用 SQL 类似的查询语言(HiveQL)来处理和分析存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集。...学习 Hive 需要结合实际场景和大量实践来加深理解。
标题中提到的"Hive学习笔记-比较全的知识"和描述中所述"相当不错的,适合初学者,下载绝对不亏"意味着本篇文档旨在为初学者提供一个全面的学习指南,覆盖Hive的主要概念和操作。而标签"hive"确定了文档的中心主题是...
【Hive学习笔记精华版】 Hive是大数据处理领域中的一款重要工具,它基于Hadoop构建,主要用于数据仓库和数据分析。作为一个离线处理系统,Hive可以将结构化的数据文件映射成数据库表,允许用户使用类似SQL的查询...
"尚硅谷大数据技术hive学习笔记" Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。 Hive 的核心是将 HQL 转化成 MapReduce 程序,通过 SQL 语言中常用的操作...
《阿里巴巴Hive学习笔记》是基于阿里巴巴内部分享的资料,主要涵盖了Hive的基本结构、与Hadoop的关系、元数据库管理以及基本操作等方面,为初学者提供了深入理解Hive的全面指南。 1. **Hive结构** - **Hive架构**...
本文档是关于Hive学习笔记的整理,涵盖了Hive的架构、Hive和Hadoop的关系、Hive和普通关系数据库的异同、Hive的元数据库、Hive数据存储、Hive的基本操作等知识点。 1. HIVE结构 Hive的架构主要包括三个部分:用户...
### Hive入门文档笔记 #### 一、Hive简介与安装配置 Hive 是一个构建在 Hadoop 之上的数据仓库工具,它通过提供 SQL 查询功能,使得用户可以更方便地处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集。...
**Hive学习笔记** Hive是由阿里巴巴数据产品平台推出的一款基于Hadoop的大数据处理工具,主要服务于大数据与云计算技术领域。Hive的核心是提供了一种类SQL(HQL)的查询语言,使得熟悉SQL的开发者能够方便地进行大...
### Spark SQL 学习笔记知识点总结 #### 一、Spark SQL 概述 - **定义**:Spark SQL 是 Apache Spark 的一个模块,用于处理结构化数据。它提供了 DataFrame 和 Dataset API,以及支持 SQL 查询的能力。这些特性...
本笔记将全面深入地探讨Hive在大数据处理中的应用、原理及其实战技巧。 一、Hive简介 Hive是Apache软件基金会下的一个开源项目,它提供了一种基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表...
Hive是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like查询语言(HiveQL)来处理和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。Hive设计的核心目标是提供可扩展的SQL处理能力,适用于数据规模...
【Hive 操作笔记】 Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户...在实际工作中,根据业务需求,还需要深入学习 Hive 的高级特性,如视图、JOIN 操作、UDF(用户定义函数)等,以实现更复杂的数据处理和分析。
### 大数据技术知识沉淀:Hive学习笔记 #### 1. Hive 架构 - **概述**:Hive 是一个基于 Hadoop 的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,使不熟悉 MapReduce 的...