一、impala存储
1、文件类型
2、压缩方式
二、impala分区
1、创建分区方式
partitioned by 创建表时,添加该字段指定分区列表: create table t_person(id int, name string, age int) partitioned by (type string); 使用alter table 进行分区的添加和删除操作: alter table t_person add partition (sex=‘man'); alter table t_person drop partition (sex=‘man'); alter table t_person drop partition (sex=‘man‘,type=‘boss’);
2、分区内添加数据
insert into t_person partition (type='boss') values (1,’zhangsan’,18),(2,’lisi’,23) insert into t_person partition (type='coder') values (3,wangwu’,22),(4,’zhaoliu’,28),(5,’tianqi’,24)
3、查询指定分区
select id,name from t_person where type=‘coder’
三、impala SQL
1、impala SQL与hive SQL对比
impala SQL支持的数据类型: INT TINYINT SMALLINT BIGINT BOOLEAN CHAR VARCHAR STRING FLOAT DOUBLE REAL DECIMAL TIMESTAMP CDH5.5版本以后才支持一下类型: ARRAY MAP STRUCT Complex
Impala不支持HiveQL以下特性:
可扩展机制,例如:TRANSFORM、自定义文件格式、自定义SerDes – XML、JSON函数 – 某些聚合函数: covar_pop, covar_samp, corr, percentile,percentile_approx, histogram_numeric, collect_set Impala仅支持:AVG,COUNT,MAX,MIN,SUM – 多Distinct查询 – HDF、UDAF --以下语句: ANALYZE TABLE (impala: COMPUTE STATS), DESCRIBE COLUMN, DESCRIBE DATABASE, EXPOR TABLE, IMPORT TABLE, SHOW TABLE EXTENDED, SHOW INDEXES, SHOW COLUMNS.
impala SQL支持视图:
视图 – 创建视图:create view v1 as select count(id) as total from tab_3 ; – 查询视图:select * from v1; – 查看视图定义:describe formatted v1 注意: 不能向impala的视图进行插入操作 insert 表可以来自视图
2、数据导入
加载数据:
insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式; load data方式:在进行批量插入时使用这种方式比较合适; 来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。
空值处理:
impala将“\n” 表示为NULL,在结合sqoop使用是注意做相应的空字段过滤, 也可以使用以下方式进行处理: alter table name set tblproperties (“serialization.null.format” = “null”)
3、优化
查询sql执行之前,可以先对该sql做一个分析,列出需要完成这一项查询的详细方案(命令:explain) 1、SQL优化,使用之前调用执行计划 2、选择合适的文件格式进行存储 3、避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表) 4、使用合适的分区技术,根据分区粒度测算 5、使用compute stats进行表信息搜集 6、网络io的优化: a.避免把整个数据发送到客户端 b.尽可能的做条件过滤 c.使用limit字句 d.输出文件时,避免使用美化输出 7、使用profile输出底层信息计划,在做相应环境优化
四、impala与hbase整合
因为impala是基于hive的,和hive使用同样的元数据,hive与hbase整合以后,impala也就可以使用hbase了; Impala可以通过Hive外部表方式和HBase进行整合,步骤如下: 步骤1:创建hbase表,向表中添加数据 create 'test info','info' put 'test info','1','info:name','zhangsan' put 'test info','2','info:name','lisi' 步骤2:创建hive表 CREATE EXTERNAL TABLE test_info(key string,name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe' STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping"=":keyinfo:name") TBLPROPERTIES (hbase.table.name" = "test info"); 步骤3:刷新Impala表 invalidate metadata