博客 Impala的使⽤—— Impala-shell命令参数、 Impala sql语法、 Impala导⼊数据

Impala的使⽤—— Impala-shell命令参数、 Impala sql语法、 Impala导⼊数据

   数栈君   发表于 2024-03-06 10:21  133  0

Impala的核⼼开发语⾔是sql语句,Impala有shell命令⾏窗⼝,以及JDBC等⽅式来接收sql语句执⾏,对于复杂类型分析可以使⽤C++或者Java来编写UDF函数。

Impala的sql语法是⾼度集成了Apache Hive的sql语法,Impala⽀持Hive⽀持的数据类型(部分除外)以及部分Hive的内置函数。

需要注意的⼏点:

1. Impala与Hive类似它们的重点都是查询,所以像Update,delete等具有更新性质的操作最好不要使⽤这种⼯具,对于删除数据的操作可以通过Drop Table,Alter Table Drop Partition来实现,更新可以尝试使⽤Insert overwrite⽅式

2. 通常使⽤Impala的⽅式是数据⽂件存储在Hdfs⽂件系统,借助于Impala的表定义来查询和管理Hdfs上的数据⽂件;

3. Impala的使⽤⼤多数与Hive相同,⽐如Impala同样⽀持内外部表,以及分区等,可以借鉴参考Hive的使⽤。

第 1 节 Impala-shell命令参数
1.1 impala-shell外部命令
所谓的外部命令指的是不需要进⼊到impala-shell交互命令⾏当中即可执⾏的命令参数。impala-shell后⾯执⾏的时候可以带很多参数。你可以在启动 impala-shell 时设置,⽤于修改命令执⾏环境。

mpala-shell –h 可以帮助我们查看帮助⼿册。也可以参考课程附件资料。

⽐如⼏个常⻅的:

impala-shell –r 刷新impala元数据,与建⽴连接后执⾏ REFRESH 语句效果相同(元数据发⽣变化的时候)

impala-shell –f ⽂件路径 执⾏指的的sql查询⽂件。

impala-shell –i 指定连接运⾏ impalad 守护进程的主机。默认端⼝是 21000。你可以连接到集群中运⾏impalad 的任意主机。

impala-shell –o 保存执⾏结果到⽂件当中去。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0516455e89104bcc140709670df9f07d..jpg
  


展示Impala默认⽀持的内置函数需要进⼊Impala默认系统数据库中执⾏

show functions;
在其它数据库下⽆法查看!

1.2 impala-shell内部命令
所谓内部命令是指,进⼊ impala-shell 命令⾏之后可以执⾏的语法。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0df7ac4ca1d6cdc9abfa0fc2b0b19833..jpg
  


connect hostname 连接到指定的机器impalad上去执⾏。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/b75131215640ec5b809b6cfa0121e048..png
  

refresh dbname.tablename 增量刷新,刷新某⼀张表的元数据,主要⽤于刷新hive当中数据表⾥⾯的数据改变的情况。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/ddeeb1cc9506ef3663fbbae37ce16816..png
  


invalidate metadata全量刷新,性能消耗较⼤,主要⽤于hive当中新建数据库或者数据库表的时候来进⾏刷新。

quit/exit 命令 从Impala shell中退出

explain 命令 ⽤于查看sql语句的执⾏计划。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/05baed2a05da02fe3fcfe861ec366b05..jpg
 

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/a387cc905b0eae2291a81cc8ee50f8e2..jpg
 




explain的值可以设置成0,1,2,3等⼏个值,其中3级别是最⾼的,可以打印出最全的信息

set explain_level=3;

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/486dc29c74ee07bb17f80f790610da8e..jpg
  

profile命令执⾏sql语句之后执⾏,可以打印出更加详细的执⾏步骤,主要⽤于查询结果的查看,集群的调优等。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/334d28f391628d8019d55daac7473f92..jpg
  


expalin:可以不真正执⾏任务,只是展示任务的执⾏计划;

profile:需要任务执⾏完成后调⽤,可以从更底层以及更详细的层⾯来观察我们运⾏impala的任务,进⾏调优。

第 2 节 Impala sql语法
2.1 数据库特定语句
1. 创建数据库

CREATE DATABASE语句⽤于在Impala中创建新数据库。
CREATE DATABASE IF NOT EXISTS database_name;

这⾥,IF NOT EXISTS是⼀个可选的⼦句。如果我们使⽤此⼦句,则只有在没有具有相同名称的现有数据库时,才会创建具有给定名称的数据库。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/193e35aaa092300e2b88bf8828a142e1..jpg
  




默认就会在hive的数仓路径下创建新的数据库名⽂件夹

/user/hive/warehouse/lagoutest.db

2. 删除数据库

Impala的DROP DATABASE语句⽤于从Impala中删除数据库。 在删除数据库之前,建议从中删除所有表。
如果使⽤级联删除,Impala会在删除指定数据库中的表之前删除它。

drop database sample cascade;
2.2 表特定语句
1. create table语句
CREATE TABLE语句⽤于在Impala中的所需数据库中创建新表。 需要指定表名字并定义其列和每列的数据类型。

impala⽀持的数据类型和hive类似.

create table IF NOT EXISTS database_name.table_name (
column1 data_type,
column2 data_type,
column3 data_type,
………
columnN data_type
);

CREATE TABLE IF NOT EXISTS mydb.student(
name STRING,
age INT,
contact INT
);
默认建表的数据存储路径跟hive⼀致。也可以在建表的时候通过location指定具体路径。

2. insert 语句

Impala的INSERT语句有两个⼦句: into和overwrite。into⽤于插⼊新记录数据,overwrite⽤于覆盖已有的记录。

insert into table_name (column1, column2, column3,...columnN)
values (value1,value2, value3,...valueN);


Insert into table_name values (value1, value2, value2);
这⾥,column1,column2,... columnN是要插⼊数据的表中的列的名称。还可以添加值⽽不指定列名,但是,需要确保值的顺序与表中的列的顺序相同。

例⼦

create table employee (
Id INT,
name STRING,
age INT,
address STRING,
salary BIGINT
);

insert into employee 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 );
overwrite覆盖⼦句覆盖表当中全部记录。 覆盖的记录将从表中永久删除。

Insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );
3. select语句

Impala SELECT语句⽤于从数据库查询数据, 此查询以表的形式返回数据。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/2d0955bd59fead2ef40b5358a3af6824..jpg
  


4. describe 语句

Impala中的describe语句⽤于提供表的描述。 此语句的结果包含有关表的信息,例如列名称及其数据类型。

describe table_name;

describe formatted table_name;
5. alter table

Impala中的Alter table语句⽤于对给定表执⾏更改。使⽤此语句,我们可以添加,删除或修改现有表中的列,也可以重命名它们.

参考Hive实现。

6. delete、truncate table

Impala drop table语句⽤于删除Impala中的现有表。此语句还会删除内部表的底层HDFS⽂件。
注意:使⽤此命令时必须⼩⼼,因为删除表后,表中可⽤的所有信息也将永远丢失。

drop table database_name.table_name;
Impala的Truncate Table语句⽤于从现有表中删除所有记录。保留表结构。

您也可以使⽤DROP TABLE命令删除⼀个完整的表,但它会从数据库中删除完整的表结构,如果您希望存储⼀些数据,您将需要重新创建此表。

truncate table_name;
Impala对复杂数据类型的⽀持
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/eec4fa76b479263bc1469b030a320034..png
  
对于Text存储格式中的复杂类型不⽀持,复杂类型要使⽤parquet格式。

7. view视图

视图仅仅是存储在数据库中具有关联名称的Impala查询语⾔的语句。 它是以预定义的SQL查询形式的表的组合。

视图可以包含表的所有⾏或选定的⾏。

create view if not exists view_name
as select statement
创建视图view、查询视图view

create view if not exists employee_view
AS select name, age from employee;
修改视图

alter view database_name.view_name
as Select语句
删除视图

drop view database_name.view_name;
8. order by⼦句

Impala ORDER BY⼦句⽤于根据⼀个或多个列以升序或降序对数据进⾏排序。 默认情况下,⼀些数据库按升序对查询结果进⾏排序。

select * from table_name ORDER BY col_name
[ASC|DESC] [NULLS FIRST|NULLS LAST]
可以使⽤关键字ASC或DESC分别按升序或降序排列表中的数据。

如果我们使⽤NULLS FIRST,表中的所有空值都排列在顶⾏; 如果我们使⽤NULLS LAST,包含空值的⾏将最后排列。

9. group by⼦句

Impala GROUP BY⼦句与SELECT语句协作使⽤,以将相同的数据排列到组中。

select name, sum(salary)
from employee
group by name;
10. having⼦句

having容易与where过滤进⾏混淆,

如何区分:
where:过滤的数据是原始数据,表中本来就存在的数据;
having:过滤的是查询结果数据;

按年龄对表进⾏分组,并选择每个组的最⼤⼯资,并显示⼤于20000的⼯资

select max(salary)
from employee
group by age
having max(salary) > 20000;
11. limit、offset

Impala中的limit⼦句⽤于将结果集的⾏数限制为所需的数,即查询的结果集不包含超过指定限制的记录。

⼀般来说,select查询的resultset中的⾏从0开始。使⽤offset⼦句,我们可以决定从哪⾥开始进行limit。

select * from employee
order by salary
limit 2 offset 2;
使⽤offset关键字要求结果数据必须是排序之后的!!

第 3 节 Impala导⼊数据
1. insert into values
这种⽅式⾮常类似于RDBMS的数据插⼊⽅式。

create table t_test2(id int,name string);

insert into table t_test2 values(1,”zhangsan”);
2. insert into select
插⼊⼀张表的数据来⾃于后⾯的select查询语句返回的结果。

3. create table as select
建表的字段个数、类型、数据来⾃于后续的select查询语句。

load data⽅式,这种⽅式不建议在Impala中使⽤,先使⽤load data⽅式把数据加载到Hive表中,然后使⽤以上⽅式插⼊Impala表中。
————————————————
本文系转载,版权归原作者CH_ENN笔记所有,链接:


https://blog.csdn.net/chengh1993/article/details/112062379    ,如若侵权请联系我们进行删除!  


《数据治理行业实践白皮书》下载地址:
https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack  
0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群