Impala-DDL数据定义 (数据库的创建、查询;表的创建、分区;视图的创建;常用SQL)


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;

 

[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 cascade;

注: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 文件的存储格式,text是二进制的,不方便查看

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表中的指定分区

 

走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 if not exists stu_view

as select name from student;

#展示视图

show tables;

#查询视图

select * from stu_view;

#更改视图

alter view stu_view as select id from student;

#删除视图

drop view stu_view;

六、Impala常用SQL

1.insert 语句

#创建表

create table person(id int ,name string, age int);

#插入数据

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 语句

 select * from person 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 3;

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

 

6.offset 语句

select * from person order by id limit 3 offset 1;

 

Offset语句在Hive是没有的

7.union 语句

select * from stu_view union select name from person;

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM