hive基础 -- blog.csdn.net/qq_41975699…
Hive基本介绍
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成为一张数据库表,并提供类SQL的查询功能。可以将sql语句转化为MapReduce任务进行运行。Hive提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制
Hive基本语法
1. 数据库操作:
- 创建数据库: create database if not exists 数据库名
- 创建数据库并指定HDFS存储位置: create database 数据库名 location 位置
- 查看有哪些数据库:show databases
- 修改数据库的信息(数据库的元数据信息是不可更改的,包括数据库的名称以及数据库所在的位置) alter database 数据库名 set dbproperties()
- 查看数据库信息:desc database 数据库名
- 查询详细数据库信息:desc database extended 数据库名
- 删除数据库(数据库的元数据信息是不可更改的,包括数据库的名称以及数据库所在的位置):drop database 数据库名
- 强制删除数据库:drop database 数据库名 cascade
2. 数据库表操作
- 创建数据库表语法:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type[COMMENT col_comment],..)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type[COMMENT col_comment],..)]
[CLUSTERED BY (col_name,col_name,...)]
[SORTED BY (col_name[ASC|DESC],...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path];
说明:
1. CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常
2. COMMENT 后面跟的字符串是给表字段或者表内容添加注释说明的,虽然它对于表之间的计算没有影响,但是为了后期的维护,所以实际开发都是必须要加COMMENT的.
3. STORED AS SEQUENCEFILE|TEXTFILE|RCFILE: 如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE
4. PARTITIONED BY其实是给表做分区,决定了表是否是分区表。Hive中所谓分区表就是将表里新增加一个字段,就是分区的名字,这样你在操作表中的数据时,可以按分区字段进行过滤。具体分区解释后面博客有说明。
5. CLUSTERED BY对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中
6. LOCATION 其实是定义hive表的数据在hdfs上的存储路径,一般管理表(内部表不不要自定义),但是如果定义的是外部表,则需要直接指定一个路径。实际上不指定也没事,会使用默认路径
-
修改数据库表信息语法:
-
alter table 旧表名 rename to 新表名;
-
alter table 表名 add columns (列名 类型,列名 类型...);
-
alter table 表名 change column 旧列名 新列名 类型;
-
-
删除数据库表
- drop table 表名
-
向表中添加数据
- 直接插入: insert into table 表名 partition () values();
- 通过load加载: load data local inpath '数据所在路径' overwrite into table 表名 partition();
- 通过查询插入数据: insert overwrite table 表名 partition() select col_name, .. from table_name;
-
将一张表拆开为两部分或多部分
-
给score表加载数据: load data local inpath '数据路径' overwrite into table score partition(month='201816');
-
创建第一部分表: create table score_first(s_id string, c_id string) partitioned by (month,string) row format delimited fields terminated by '\t'
-