impala 外部shell(在进入impala shell之前输):
-h(--help) :帮助
-v(--version):查看版本号
-V (--verbose):启用详细输出
--quiet:关闭详细输出
-p:显示执行计划
-i hostname(--impalad=hostname) 指定连接主机 ,格式hostname:port默认端口21000
-r(--refresh_after_connect) :刷新所有元数据
-q query(--query=query):从命令行执行查询,不进入impala-shell,直接在命令行中进行sql查询,不进入impala-shell
-d default_db(--database=default_db)指定数据库
-B (--delimited) 去格式化输出,比如说将多余的横杠、加号给去掉,将美化的效果去掉
--output_delimited=character 指定分隔符
--print_header 打印列名
-f query_file(--query_file=query_file)执行查询文件,以分号分隔
-o filename (--output_file filename) 结果输出到指定文件
-c 查询执行失败时继续执行
-k (--kerberos) 使用kerberos安全加密方式运行impala-shell
-l 启用LDAP认证
-u 启用LDAP时,指定用户名
impala 内部shell:
help
connect <hostname:port> 连接主机,默认端口21000
refresh <tablename> 增量刷新元数据库
invalidate metadata 全量刷新元数据库
explain <sql> 显示查询执行计划、步骤信息
set explain level 设置显示级别(0,1,2,3)
shell <shell> 不退出impala-shell执行Linux命令
profile (查询完成后执行)查询最近一次查询的底层信息
impala 存储&&分区:
文件类型 格式 压缩 是否能直接创建 是否直接插入
parquet structured snappy,gzip;currently √ √
snappy by default create table,insert,load data,and query
text unstructured LZO,gzip,bzip2, √ √
snappy 1.LZO在hive中创建表、加载数据
2.其他压缩格式可通过Load Data、
hive、操作HDFS方式
avro structured snappy,gzip,deflate, √ ×
bzip2 impala1.4.0以前 仅支持查询
通过hive创建表 通过load data、在hive加载数据
RCFile structured snappy,gzip,deflate, √ ×
bzip2 仅支持查询
通过load data、在hive加载数据
sequence Structured snappy,gzip,deflate, √ ×
file bzip2 仅支持查询
通过load data、在hive加载数据
压缩方式:
snappy:推荐使用的压缩算法,该算法在压缩比和解压速度上实现了很好的平衡。
GZIP:期望达到最大压缩比(最少硬盘空间)时推荐,主要以节省硬盘空间为目的。
deflate:不支持文本文件
BZIP2:不支持文本文件
LZO:仅支持文本文件。Impala可以直接查询LZO压缩文本文件表,但目前无法创建该类型压缩表和向该类型压缩表插入数据,
需要在hive中执行这些操作。
压缩的好处:减少本地磁盘上的存储空间,在做网络传输的时候减少带宽,
压缩的坏处:是会占用cpu的资源,因为写的时候要压缩跟解压的时候会占用。
分区:
添加分区方式:
- 1.partition by 创建表时,添加该字段指定分区列表
create table t_psn(id int,name string,age int) partition by(type string);
- 2.使用alter table 进行分区的添加和删除操作
alter table t_psn add partition(type='coder');
alter table t_psn drop partition(type='coder');
给分区添加数据:
insert into t_psn partition(type='boss') values(1,'zhangsan',18),(2,'lisi',19);
查询某个分区里的数据:
select * from t_psn whrer type='boss';
impala SQL:
创建数据库:
- create database db1;
- use db1;
删除数据库:
- use default;
- drop database db1;(删除数据库时要先使用另一个数据库)
创建表(内部表):
- 默认方式创建表:
create table t_psn(
id int,
name string
)
- 指定存储方式:
create table t_psn(
id int,
name string
)
row format delimited
fields terminated by '\0' (impala1.3.1版本以上支持'\0')
stored as textfile;
- 其他方式创建内部表:
使用现有表结构:
create table t_psn1 like t_psn;
指定文本表字段分隔符:
alter table t_psn1 set serdeproperties
('serialization.format'=',','field.delim'=',');
插入数据:
- 直接插入值方式:
insert into t_psn values(1,'zhangsan',18);
- 从其他表插入数据:
insert into t_psn1 select * from t_psn;
- 批量导入文件方式:
load data from local inpath '' into table t_psn;
因为每次插入数据都会有个小文件,所以优先选择其他的方式,因为产生的文件数比较少。
创建表(外部表):
- 默认方式创建表:
create table t_psn(
id int,
name string
)
location '/user/xxx.txt'
- 指定存储方式:
create external table t_psn1 like t_psn
'/user/xxx/xxx/1.dat'
partition(year int,month tinyint,day tinyint)
location '/user/xxx/xxx'
stored as parquet;
视图:
- 创建视图:
create view v1 as select * from t_psn;
- 查询视图:
select * from v1;
- 查看视图定义:
describe formatted v1;
注意:
1):不能向impala的视图进行插入操作
2):insert 表可以来自视图,insert into t_psn1 select * from t_psn;这里的t_psn可以是个表名也可以是个视图。
简单总结:
impala --> 性能优化
快 - 内存、c++、摒弃MR方式、datalocal 、列式存储与hbase结合、具有数据仓库特性(因为是hive)
impala VS hive关系
缺点:对内存要求高,因为是在内存中运行的,分区超过1w之后性能受损,对hive依赖太大、开源?!
impala安装:cdh,用clouder manager安装
架构:
catalog :元数据更新
statestore :对整个集群进行健康检查
impalad:做计算的,最主要的,中心协调节点(但只有这次查询请求的那台节点impalad才是中心协调节点)
所以一般是catalog和statestore一般放在同一个节点上,而impalad放在datanode上
查看执行计划:-p(全部的) explain profile(最近一次的查询) 查看执行计划,profile还会查看底层的一些执行信息
-r ;refresh ;invalidate metadata
-f -i -o
impala仅支持avg、count、max、min、sum,还不支持多distinct查询(一个子查询里只能有一个distinct).