Hive Sql (一)

目录

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


1.HIVE的数据类型

1.1.基本数据类型

类型 注释
STRING 文本型,数值也可以定义为该类型,并且可以运算,要注意的是排序会按照文本排序(如,9、10升序,因为10的第一个文本是1,因此10在9前面)
INT/INTEGER 整型
DATE 日期型

2.2.复杂数据类型

类型 注释 例子
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的展示结果:{"":"" , "":"",...,"":""}

2.创建、使用、删除数据库

2.1.创建数据库

语法:
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;

2.2.使用数据库

语法: USE database_name;
例子: USE myhive;

2.3.删除数据库

语法:DROP (DATABASE | SCHEMA) [IF EXIST] database_name [RESTRICT | CASCADE]   注:RESTRICT | CASCADE强制删除
​
例子:DROP DATABASE myhive;

3.创建、修改、删除表

3.1.创建表

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;

3.2.修改表

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);

3.3.删除表

DROP TBALE [IF EXIST] t1;

4.表的类型

一般使用外部表,外部表的好处:当hive删除了外部表,hdfs映射的表依然不受影响,还存在;而内部表被hive删除后,hdfs映射的表也会被删除。

4.1.内部表

CREATE TABLE t1(id INT,...)

4.2.外部表

CREATE  EXTERNAL TABLE t1(id INT,...)  --仅多了EXTERNAL

4.3.分区表

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中加上分区的具体条件

5.导入导出数据

5.1.导入分区数据

LOAD DATA [LOCAL] INPATH '/home/hadoop/file1' [OVERWRITE] INTO TABLE t1 PARTITION (dt='2021-08-06', country='CHINA')

5.2.1.从本地导入到hive表

LOAD DATA LOCAL INPATH '/home/hadoo t' INTO TABLE t1;

5.2.2.从hdfs导入到hive表

LOAD DATA INPATH '/file1.txt' INTO TABLE t1;

5.3.导出数据

5.3.1.将hive表保存到本地

INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/t1' SELECT * FROM t1;

5.3.2.将hive表保存到hdfs

INSERT OVERWRITE DIRECTORY '/abc' SELECT * FROM t1;

你可能感兴趣的:(hql)