`
gaozzsoft
  • 浏览: 428873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Impala Shell 命令汇总和 ImpalaSQL研究

 
阅读更多

 Impala Shell 命令汇总和 ImpalaSQL研究

 

1、Impala 外部 Shell

  Impala外部Shell 就是不进入Impala内部,直接执行的ImpalaShell 例如通过外部Shell查看Impala帮助可以使用: $ impala-shell -h 这样就可以查看了;

  再例如显示一个SQL语句的执行计划: $ impala-shell -p select count(*) from t_stu

  下面是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

  • -d default_db (--database=default_db) 指定数据库
  • -B(--delimited)去格式化输出
  • --output_delimiter=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时,指定用户名

2、Impala内部Shell

  使用命令 $ impala-sehll  可以进入impala,在这里可以像Hive一样正常使用SQL,而且还有一些内部的impala命令:

  • help
  • connect <hostname:port> 连接主机,默认端口21000
  • refresh <tablename> 增量刷新元数据库
  • invalidate metadata 全量刷新元数据库
  • explain <sql> 显示查询执行计划、步骤信息
  • set explain_level 设置显示级别(0,1,2,3)
  • shell <shell> 不退出impala-shell执行Linux命令
  • profile (查询完成后执行) 查询最近一次查询的底层信息

  例:查看帮助可以直接使用: help ,要刷新一个表的增量元数据可以使用 refresh t_stu;

3、Impala 的监护管理

  可以通过下面的链接来访问Impala的监护管理页面:

  • 查看StateStore
    – http://node1:25020/
  • 查看Catalog
    – http://node1:25010/

4、Impala  存储&&分区

  下面是Impala对文件的格式及压缩类型的支持

  

  

  • 添加分区方式
    – 1、partitioned by 创建表时,添加该字段指定分区列表
    – 2、使用alter table 进行分区的添加和删除操作

1
2
3
4
create table t_person(id intname string, age int) partitioned by (type string);
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’);

  

  • 分区内添加数据
    

1
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)

  

  • 查询指定分区数据

1
select id,name from t_person where type=‘coder

  

5、Impala SQL VS HiveQL

  下面是Impala对基础数据类型和扩展数据类型的支持

  

  

  • 此外,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、EXPORT TABLE、IMPORT TABLE、SHOW
    TABLE EXTENDED、SHOW INDEXES、SHOW COLUMNS

6、Impala SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
--创建数据库
create database db1;
use db1;
 
-- 删除数据库
use default;
drop database db1;
 
--创建表(内部表)
-- 默认方式创建表:
create table t_person1(
id int,
name string)
 
--指定存储方式:
create table t_person2(
id int,
name string
)
row format delimited
fields terminated by ‘\0’ (impala1.3.1版本以上支持‘\0’ )
stored as textfile;
 
--其他方式创建内部表
--使用现有表结构:
create table tab_3 like tab_1;
 
--指定文本表字段分隔符:
alter table tab_3 set serdeproperties(‘serialization.format’=‘,’,’field.delim’=‘,’);
 
--插入数据
-- 直接插入值方式:
insert into t_person values (1,hex(‘hello world’));
 
--从其他表插入数据:
insert (overwrite) into tab_3 select * form tab_2 ;
 
--批量导入文件方式方式:
load data local inpath ‘/xxx/xxx’ into table tab_1;
 
--创建表(外部表)
--默认方式创建表:
create external table tab_p1(
id int,
name string
)
location ‘/user/xxx.txt’
 
--指定存储方式:
create external table tab_p2 like parquet_tab
‘/user/xxx/xxx/1.dat’
partition (year int month tinyint, day tinyint)
location ‘/user/xxx/xxx’
stored as parquet;
 
--视图
--创建视图:
create view v1 as select count(id) as total from tab_3 ;
 
--查询视图:
select from v1;
 
--查看视图定义:
describe formatted v1 

  • 注意:
    – 1)不能向impala的视图进行插入操作
    – 2)insert 表可以来自视图
  • 数据文件处理
    – 加载数据:
      • 1、insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式加载批量数据
      • 2、load data方式:再进行批量插入时使用这种方式比较合适
      • 3、来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。
    – 空值处理:
      • impala将“\n”表示为NULL,在结合sqoop使用是注意做相应的空字段过滤,
  • 也可以使用以下方式进行处理:
    alter table name set tblproperties(“serialization.null.format”=“null”)

 

----------------------------------------------------------------------------------------------------------------------------------

本文主要介绍Impala shell命令

1、-h 外能帮助

 

格式:$ impala-shell -h

 

2、-r  刷新整个元数据*

(Refresh Impala catalog after connecting,默认为false)

 

2.1 在hive创建表t1

hive> create table t1(id int ,name string);

OK

Time taken: 0.423 seconds

 

2.2 通过impala-shell 查看对应的表,发现不存在,原因是需要通过手动涮新hive metadata

 show tables;

 $ impala-shell -r

 

执行后,在通过show tables 可以查看到刚才的表

 

3、-B 去格式化,查询大数据量时可以提高性能*

 

3.1 在impala shell中 初始化数据

 insert into table t1(id,name) values(100,'sfl');

 insert into table t1(id,name) values(101,'zs');

 insert into table t1(id,name) values(102,'ls');

 

3.2 在impala 查看数据和hive中查看数据

select * from t1;

发现结果完成一致,原因就是impala和hive中存储的数据都存在同一个元数据中

 

3.3 通过-B 演示 

$ impala-shell  -B  -q  'select * from shenfuli.t1;' -o a.txt

$ more a.txt

102     ls

100     sfl

101     zs

 

通过-B发现,输出格式通过Hive的输出内容一致,由于-r是对整个元数据库进行刷新,实际生产环境中不建议这么用。

 

3.4 通过-B --print_header 可以显示列的名称

$ impala-shell -B --print_header -q 'select * from shenfuli.t1;' -o c.txt

$ more c.txt

id      name

100     sfl

102     ls

101     zs

 

4、  -v    查看对应版本

$ impala-shell -v

Impala Shell v2.2.0-cdh5.4.4 (a13d3c6) built on Mon Jul  6 16:57:34 PDT 2015

 

$ impala-shell

Starting Impala Shell without Kerberos authentication

Connected to crxy168:21000

Server version: impalad version 2.2.0-cdh5.4.4 RELEASE (build a13d3c6b203e79a284b509df821bffbe229e6dc3)

Welcome to the Impala shell. Press TAB twice to see a list of available commands.

 

Copyright (c) 2012 Cloudera, Inc. All rights reserved.

 

(Shell build version: Impala Shell v2.2.0-cdh5.4.4 (a13d3c6) built on Mon Jul  6 16:57:34 PDT 2015)

 

 

注: 一般情况下升级Impala后,需要检查Impala version和Impala shell version,两个版本必须一致,否则可能会出现查询异常的情况。

 

5、  -f    执行查询文件*

       --query_file 指定查询文件

 

$ cat impala-sql

select * from shenfuli.t1;

$ impala-shell  -f impala-sql ;

$ impala-shell  -B  -f impala-sql -o d.txt;

$ more d.txt

102     ls

100     sfl

101     zs

 

说明: 实际工作中的SQL语句都是通过写到一个文件中,然后通过-f命令调用。

 

6、 -o   保存执行结果到文件*

       --output_file   指定输出文件名

 

7、 -q    不进入impala-shell执行查询

$ impala-shell -q 'select * from shenfuli.t1' --output_file=b.txt

$ more b.txt

+-----+------+

| id  | name |

+-----+------+

| 102 | ls   |

| 100 | sfl  |

| 101 | zs   |

+-----+------+

 

 

8、 -p    显示执行计划

      --quiet    不显示多余信息

$ impala-shell -q 'select * from shenfuli.t1;'  -p >1.txt

 

说明: 文件1.txt 含有详细的执行计划,通过该文件可以分析SQL,优化SQL语句。

 

9、刷新某个表元数据

    refresh    <tablename>      属于增量刷新

 

说明: 相比-r,通过refresh 一个表更加使用,并且属于增量刷新。

 

10、显示一个查询的执行计划及各步骤信息

    explain  <sql>    可以设置set explain_level,总共分成4个级别,分别0-3。数字越大,输出信息越详细

 

 

11、显示查询底层信息(底层执行计划,用于性能优化)

      profile  在查询完成之后执行

 

在集群中运行一段时间发现执行变慢,可以只用profile来检查

 

参考from:

https://blog.csdn.net/hxpjava1/article/details/54924856

https://blog.csdn.net/shenfuli/article/details/49075003

 

 

 

分享到:
评论

相关推荐

    Impala用户指南

    #### 2.5 ImpalaShell - **命令行参数**:用于控制Impala-shell的行为,如指定主机名、端口等。 - **执行命令**:在Impala-shell中输入SQL语句或其他命令来执行查询或管理任务。 #### 2.6 Impala性能优化 - **...

    cloudera impala安装使用中文版

    - **Impala SQL 方言**: 提供类似于 SQL-92 的查询语言,但具有额外的功能和优化。 - **编程接口**: 提供多种编程接口,如 Java API,便于开发者集成应用。 - **与 Hive 的协同工作**: Impala 与 Hive 共享相同的元...

    impala与hive的区别1

    - CLI:提供用户界面,如Impala Shell,以及JDBC和ODBC接口,方便用户交互。 2. Impala与Hive的关系: - Impala和Hive都是基于Hadoop的数据查询系统,但在应用场景上有区别。Hive适合长时间的批处理查询,而...

    impala学习总结.pdf

    Impalad接受来自impala-shell、Hue、JDBC、ODBC等各种客户端的SQL请求,实现查询的并行执行和结果的分布式处理。 总的来说,Impala通过优化的架构和执行机制,提供了高效、灵活的大数据查询能力,适用于需要快速...

    impala学习总结.doc

    它接受并执行来自impala-shell、Hue、JDBC、ODBC等各种客户端的SQL请求,执行查询并在集群节点上并行处理,最后将汇总的结果返回给客户端。 总而言之,Impala是一个高性能、面向大数据的SQL查询引擎,它通过优化的...

    大数据基础面试题hadoop,zookeeper,hbase,hive,spark,kafka,flink,clickhouse

    它支持批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)和机器学习(MLlib)。Spark 拥有内存计算,相比 MapReduce,能显著提升数据处理速度。 6. **Kafka**: Kafka 是一个高吞吐量的分布式消息...

Global site tag (gtag.js) - Google Analytics