大数据-impala(三)
impala-shell语法
impala-shell的外部命令参数语法
不需要进入到impala-shell交互命令行当中即可执行的命令参数
impala-shell后面执行的时候可以带很多参数:
-h 查看帮助文档
impala-shell -h
-r 刷新整个元数据,数据量大的时候,比较消耗服务器性能
impala-shell -r
-v 查看对应版本
impala-shell -v -V
-f 执行查询文件
cd /kkb/install
vim impala-shell.sql
select * from course.score;
通过-f 参数来执行执行的查询文件
impala-shell -f impala-shell.sql
-p 显示查询计划
impala-shell的内部命令行参数语法
进入impala-shell命令行之后可以执行的语法
help命令
帮助文档
connect命令
connect hostname 连接到某一台机器上面去执行
refresh 命令
refresh dbname.tablename 增量刷新,刷新某一张表的元数据,主要用于刷新hive当中数据表里面的数据改变的情况。
refresh course.score;
invalidate metadata 命令
全量刷新,性能消耗较大,主要用于hive当中新建数据库或者数据库表的时候来进行刷新
invalidate metadata
explain 命令
用于查看sql语句的执行计划
explain select * from course.score;
#explain的值可以设置成0,1,2,3等几个值,其中3级别是最高的,可以打印出最全的信息
set explain_level=3;
profile命令
执行sql语句之后执行,可以打印出更加详细的执行步骤,
主要用于查询结果的查看,集群的调优等
select * from course.score;
profile;
注意:在hive窗口当中插入的数据或者新建的数据库或者数据库表,在impala当中是不可直接查询到的,需要刷新数据库,在impala-shell当中插入的数据,在impala当中是可以直接查询到的,不需要刷新数据库,其中使用的就是catalog这个服务的功能实现的,catalog是impala1.2版本之后增加的模块功能,主要作用就是同步impala之间的元数据。
创建数据库
impala-shell进入到impala的交互窗口
查看所有数据库
show databases;
创建与删除数据库
CREATE DATABASE IF NOT EXISTS mydb1;
drop database if exists mydb;
创建数据库表并指定数据库表数据存放hdfs的位置(与hive建表语法类似)
hdfs dfs -mkdir -p /input/impala
create external table t3(id int ,name string ,age int ) row format delimited fields terminated by '\t' location '/input/impala/external';
创建数据库表
#创建student表
CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT );
#创建employ表
create table employee (Id INT, name STRING, age INT,address STRING, salary BIGINT);
数据库表中插入数据
insert into employee (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 );
insert into employee values (2, 'Khilan', 25, 'Delhi', 15000 );
Insert into employee values (3, 'kaushik', 23, 'Kota', 30000 );
Insert into employee values (4, 'Chaitali', 25, 'Mumbai', 35000 );
Insert into employee values (5, 'Hardik', 27, 'Bhopal', 40000 );
Insert into employee values (6, 'Komal', 22, 'MP', 32000 );
数据的覆盖
Insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );
执行覆盖之后,表中只剩下了这一条数据了
另外一种建表语句
create table customer as select * from employee;
数据查询
select * from employee;
select name,age from employee;
删除表
DROP table mydb1.employee;
清空表数据
truncate employee;
查看视图数据
select * from employee_view;
order by语句
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
Select * from employee ORDER BY id asc;
group by 语句
Select name, sum(salary) from employee Group BY name;
having 语句
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
按年龄对表进行分组,并选择每个组的最大工资,并显示大于20000的工资
select max(salary) from employee group by age having max(salary) > 20000;
limit语句
select * from employee order by id limit 4;
impala当中的数据表导入几种方式
第一种 通过load hdfs的数据到impala当中去
create table user(id int ,name string,age int ) row format delimited fields terminated by "\t";
准备数据user.txt并上传到hdfs的 /user/impala路径下去
1 hello 15
2 zhangsan 20
3 lisi 30
4 wangwu 50
加载数据
load data inpath '/user/impala/' into table user;
查询加载的数据
select * from user;
#如果查询不不到数据,那么需要刷新一遍数据表
refresh user;
第二种
create table user2 as select * from user;
第三种
insert into 不推荐使用 因为会产生大量的小文件
千万不要把impala当做一个数据库来使用
第四种
insert into select 用的比较多
此博文仅供学习参考,如有错误欢迎指正。
上一篇《大数据-impala(二)》
下一篇《大数据-impala(四)》