impala知识点

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 连接主机,默认端口21000
    refresh 增量刷新元数据库
    invalidate metadata 全量刷新元数据库
    explain 显示查询执行计划、步骤信息
        set explain level 设置显示级别(0,1,2,3)
    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).

你可能感兴趣的:(impala知识点)