目录
1.HIVE的数据类型
1.1.基本数据类型
2.2.复杂数据类型
2.创建、使用、删除数据库
2.1.创建数据库
2.2.使用数据库
2.3.删除数据库
3.创建、修改、删除表
3.1.创建表
3.2.修改表
3.3.删除表
4.表的类型
4.1.内部表
4.2.外部表
4.3.分区表
5.导入导出数据
5.1.导入分区数据
5.2.1.从本地导入到hive表
5.2.2.从hdfs导入到hive表
5.3.导出数据
5.3.1.将hive表保存到本地
5.3.2.将hive表保存到hdfs
类型 | 注释 | |
---|---|---|
STRING | 文本型,数值也可以定义为该类型,并且可以运算,要注意的是排序会按照文本排序(如,9、10升序,因为10的第一个文本是1,因此10在9前面) | |
INT/INTEGER | 整型 | |
DATE | 日期型 |
类型 | 注释 | 例子 |
---|---|---|
ARRAY | 一组有序字段,类型必须相同 | ARRAY(1,2) |
MAP | 一组无序的键值对,键的类型必须是原子,值可以是任何类型,同一个映射的键的类型必须相同,值的类型也必须相同 | MAP('a',1,'b',2) |
STRUCT | 一组命名的字段,字段的类型可以不同 | STRUCT('a',1,2,3) |
创建:
CREATE TABLE T1 (id INT
, hobby ARRAY
, family_name MAP
, info STRUCT < age : INT, sex : STRING , address : STRING>);
查询:
SELECT id, family_name('father') --仅查看family_name的father名字
SELECT id, MAP_KEYS(family_name) --查看所有键
SELECT id, info.age --仅查看info的年龄
MAP、STRUCT的展示结果:{"":"" , "":"",...,"":""}
语法:
CREATE (DATABASE | SCHEMA) [IF NOT EXIST] database_name
[COMMENT database_comment]
[LOCATION location_path]
[WITH DBPROPERTIES (property_name=property_values,...)]
例子:
CREATE DATABASE myhive
COMMENT test;
语法: USE database_name;
例子: USE myhive;
语法:DROP (DATABASE | SCHEMA) [IF EXIST] database_name [RESTRICT | CASCADE] 注:RESTRICT | CASCADE强制删除
例子:DROP DATABASE myhive;
1.直接建表
CREATE TABLE t1(id INT
,name STRIGN
,hobby ARRAY
,address AMP)
ROW FORMAT DELIMITIED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ';'
2.查询建表(结构+数据)
CREATE TABLE t1 AS SELECT * FROM t2;
3.like建表 (仅结构)
CREATE TABLE t1 LIKE t2;
1.修改表名
ALTER TABLE t1 RENAME TO t2;
2.修改列名
ALTER TABLE t1 CHANGE columns_name new_name new_type;
3.增/删列
ALTER TABLE t1 ADD/DROP COLUMNS(age INT);
DROP TBALE [IF EXIST] t1;
一般使用外部表,外部表的好处:当hive删除了外部表,hdfs映射的表依然不受影响,还存在;而内部表被hive删除后,hdfs映射的表也会被删除。
CREATE TABLE t1(id INT,...)
CREATE EXTERNAL TABLE t1(id INT,...) --仅多了EXTERNAL
CREATE [EXTERNAL] TABLE t1(id INT,...)
PARTITION BY (dt STRING, country STRING);--定义分区
LOAD DATA LOCAL INPATH '/home/hadoop/file1' INTO TABLE t1
PARTITION (dt='2021-08-06', country='CHINA') --插入分区信息
什么是分区?建表的时候,将表放在指定的区域上(相当于指定了索引名)
为什么需要分区?因为,当表格规模巨大的时候,查询起来非常慢,为了提高查询效率,需要依靠定位分区(类比索引效果)代替全表搜索
什么表需要分区?表格规模巨大,比如:事实表(订单表、退款表等)
如何制定分区?partition by (part_col1=value1,part_col2=value2,...)
查询时的注意什么?需要在where中加上分区的具体条件
LOAD DATA [LOCAL] INPATH '/home/hadoop/file1' [OVERWRITE] INTO TABLE t1 PARTITION (dt='2021-08-06', country='CHINA')
LOAD DATA LOCAL INPATH '/home/hadoo t' INTO TABLE t1;
LOAD DATA INPATH '/file1.txt' INTO TABLE t1;
INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/t1' SELECT * FROM t1;
INSERT OVERWRITE DIRECTORY '/abc' SELECT * FROM t1;