hive常见的命令

Hive官方操作手册

1 Hive特性

  1. hive基于Hadoop,将结构化数据映射为一张数据库表,提供类SQL查询功能
  2. Hive元数据存储,通常存储在关系形数据库中,Hive中的元数据包括(表的名称,列,分区,是否为外部表等属性,数据所在的路径)
  3. Hive支持MapReduce、Tez和Spark 三种计算引擎。
  4. 数据格式。数据格式用户定义,根据三个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile)
  5. 数据更新。不支持对数据的更新,使用更新可以借助Impala引擎+kudu数据格式
  6. 索引。有hive版本支持建立索引,但是各种问题,不建议使用。
  7. Hive中包含的数据模型,DB、Table,External Table,Partition,Bucket
    • db:在hdfs中表现为hive.metastore.warehouse.dir目录下一个文件夹。
    • table:在hdfs中表现所属db目录下一个文件夹。
    • external table:与table类似,不过其数据存放位置可以在任意指定路径。
    • partition:在hdfs中表现为table目录下的子目录。
    • bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件。

2 Hive表类型

2.1 hive数据类型

  • Hive的基本数据类型有:TINYINT,SAMLLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,TIMESTAMP(V0.8.0+)和BINARY(V0.8.0+)
  • Hive的集合类型有:STRUCT,MAP和ARRAY
  • Hive表:内部表、外部表、分区表和桶表。
  • 表的元数据保存传统的数据库的表中,当前hive只支持Derby和MySQL数据库

2.2 Hive内部表

Hive中的内部表和传统数据库中的表在概念上是类似的,Hive的每个表都有自己的存储目录,除了外部表外,所有的表数据都存放在配置在hive-site.xml文件的${hive.metastore.warehouse.dir}/table_name目录下。

1
2
3
4
5
6
-- 创建内部表
CREATE TABLE IF NOT EXISTS students(user_no INT,name STRING,sex STRING,  
         grade STRING COMMOT '班级'COMMONT '学生表'  
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
STORE AS TEXTFILE;

2.3 Hive外部表

被external修饰的为外部表(external table),外部表指向已经存在在Hadoop HDFS上的数据,除了在删除外部表时只删除元数据而不会删除表数据外,其他和内部表很像

1
2
3
4
5
6
7
-- 创建外部表
CREATE EXTERNAL TABLE IF NOT EXISTS students(user_no INT,name STRING,sex STRING,  
         class STRING COMMOT '班级'COMMONT '学生表'  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
STORE AS SEQUENCEFILE 
LOCATION '/usr/test/data/students.txt';

2.4 Hive分区表

分区表的每一个分区都对应数据库中相应分区列的一个索引,分区表中的每一个分区对应一个目录文件,即同一个分区的数据存放一个目录下面,所以分区表如果很大,指定分区会速度快很多

比如说,分区表partitinTable有包含nation(国家)、ds(日期)和city(城市)3个分区,其中nation = china,ds = 20130506,city = Shanghai则对应HDFS上的目录为: /datawarehouse/partitinTable/nation=china/city=Shanghai/ds=20130506/

1
2
3
4
5
6
7
8
-- 创建分区表
CREATE TABLE IF NOT EXISTS students(user_no INT,name STRING,sex STRING,
         class STRING COMMOT '班级'COMMONT '学生表'  
PARTITIONED BY (ds STRING,country STRING)  -- 分区的列不属于建表的字段中
ROW FORMAT DELIMITED  --分隔符
FIELDS TERMINATED BY ','  -- 结束换行符
STORE AS SEQUENCEFILE -- 数据存储格式
;

2.5 Hive分桶表

对指定列进行HASH,根据hash值进行切分数据,不同hash结果的数据写到每个桶对应的文件目录中

1
2
3
4
5
6
7
8
-- 创建分桶表
CREATE TABLE IF NOT EXISTS students(user_no INT,name STRING,sex STRING,  
         class STRING COMMOT '班级',score SMALLINT COMMOT '总分'COMMONT '学生表'  
PARTITIONED BY (ds STRING,country STRING)  
CLUSTERED BY(user_no) SORTED BY(score) INTO 32 BUCKETS  -- 分桶
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
STORE AS SEQUENCEFILE;

2.6 Hive视图

逻辑数据结构,将查询结果作为视图,简化查询操作

1
2
3
4
5
6
7
8
CREATE VIEW employee_skills
 AS
SELECT name, skills_score['DB'] AS DB,
skills_score['Perl'] AS Perl, 
skills_score['Python'] AS Python,
skills_score['Sales'] as Sales, 
skills_score['HR'] as HR 
FROM employee;

2.7 总结

表的创建官方标准 LanguageManual DDL -创建表的语法结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
  [(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])]
  [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]
  [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
     ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
     [STORED AS DIRECTORIES]
  [
   [ROW FORMAT row_format] 
   [STORED AS file_format]
     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
  [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
1
2
3
4
-- 用另外一个表的结构来创建
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];

删除表

1
DROP TABLE [IF EXISTS] table_name [PURGE];     -- (Note: PURGE available in Hive 0.14.0 and later)

清空表

1
2
3
TRUNCATE [TABLE] table_name [PARTITION partition_spec];
partition_spec:
  : (partition_column = partition_col_value, partition_column = partition_col_value, ...)
Buy me a coffee~
Fred 支付宝支付宝
Fred 微信微信
收录于 合集・Hive 1
0%