DDL(Data Definition Language)数据定义

一、创建数据库

CREATE DATABASE [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path];

注:Impala不支持WITH DBPROPERTIE…语法,但是在Hive中可以

[bigdata12:21000] > create database db_hive WITH DBPROPERTIES('name' = 'Plus');
Query: create database db_hive
WITH DBPROPERTIES('name' = 'ttt')
ERROR: AnalysisException: Syntax error in line 2:
WITH DBPROPERTIES('name' = 'ttt')
^
Encountered: WITH
Expected: COMMENT, LOCATION
 
hive> create database db_hive WITH DBPROPERTIES('name' = 'plus');

或者直接通过Impala创建:

[cdh2:21000] >create database db_hive ('name' = 'plus');

二、查询数据库

1.显示数据库

[cdh:21000] > show databases;

 

impala 导出到hdfs impala导出建表语句_Hive

[cdh:21000] > show tables;
Query: show tables
+----------+
| name     |
+----------+
| student2 |
+----------+
Fetched 1 row(s) in 0.07s
[bigdata12:21000] > show databases like 'hive*';

这里的like也可以不写。

Query: show databases like 'hive*'
+---------+---------+
| name    | comment |
+---------+---------+
| hive_db |         |
+---------+---------+
[bigdata12:21000] > desc database hive_db;
Query: describe database hive_db
+---------+----------+---------+
| name    | location | comment |
+---------+----------+---------+
| hive_db |          |         |
+---------+----------+---------+

2.删除数据库

[bigdata12:21000] > drop database hive_db;

[bigdata12:21000] > drop database hive_db

注:Impala不支持alter database语法,且当数据库被 USE 语句选中时,无法删除

三、创建表

1.管理表-内部表

[bigdata12:21000] >create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student2';
[bigdata12:21000] > desc formatted student2;

2.外部表

[bigdata12:21000] >create external table stu_external(

id int, name string)

row format delimited fields terminated by '\t'

location '/stu_external';  外部表可以自定义存储路径

这样这张表就不会在默认数据库中存储,存在自定义的路径下。

四、分区表

1.创建分区表

[bigdata12:21000] >create table stu_par(id int, name string)

partitioned by (month string)

row format delimited

fields terminated by '\t';

分区字段永远都在最后显示,像这里的month就是如此。

2.向表中导入数据

[bigdata12:21000] > alter table stu_par add partition (month='201910');

[bigdata12:21000] > load data inpath '/student.txt' into table stu_par partition(month='201910');

[bigdata12:21000] > insert into table stu_par partition (month = '201910') select * from student;

注意:

Impala:如果分区没有,load data导入数据时,不能自动创建分区。

Hive:如果分区没有,load data导入数据时,会自动创建分区。

在HDFS上load相当于移动、在Hive上load本地的话就相当于复制进去;HDFS的话相当于剪切。

接下来自己通过Impala将student表中的数据插入到stu_par表中的指定分区

 

impala 导出到hdfs impala导出建表语句_数据_02

走Hive的话需要运行job,需要走map

3.查询分区表中的数据

[bigdata12:21000] > select * from stu_par where month = '201911';

4.增加多个分区

[bigdata12:21000] > alter table stu_par add partition (month='201812') partition (month='201813');

增加多个分区的话分区之间要用空格隔开。

5.删除分区

[bigdata12:21000] >  alter table stu_par drop partition (month='201812');

删除多个分区的话分区之间要用逗号隔开。

6.查看分区

[bigdata12:21000] > show partitions stu_par;

五、创建视图

#创建视图

create view

as

#展示视图

show tables;

#查询视图

select * from stu_view;

#更改视图

alter view stu_view as

#删除视图

drop view

六、Impala常用SQL

1.insert 语句

#创建表
create table
#插入数据
insert into person values(1,'A',18);
insert into person values(1,'A_1',20);
insert into person values(2,'B',29);
insert into person values(3,'C',16);
insert into person values(4,'D',40);
Impala执行每条insert语句通常只需要零点几秒,

2.ORDER BY 语句

order by age desc; 倒序的

注意:Impala不支持区内排序,只支持全局排序,因为Impala不走MR。

3.GROUP BY 语句

insert into person values(1,'A',21);

select name,sum(age) from person group by name;

对name进行分组,求每组的年龄和

4.Having 语句

select name,sum(age) from person

group by name having sum(age) >30;

对name进行分组,求每组的年龄和,并且只筛选出年龄和大于30的

5.Limit 语句

select * from person order by id limit

按照id排序,只选取前三行的数据

 

impala 导出到hdfs impala导出建表语句_impala 导出到hdfs_03

6.offset 语句

select * from person order by id limit 3 offset

 

impala 导出到hdfs impala导出建表语句_impala 导出到hdfs_04

Offset语句在Hive是没有的

7.union 语句

select * from stu_view union

UNION 操作符 合并两个或多个 SELECT 语句的结果。