|NO.Z.00008|——————————|BigDataEnd|——|Hadoop&Impala.V08|——|Impala.v08|使用操作.v02|
一、Impala sql语法
### --- 数据库特定语句:创建数据库
~~~ # CREATE DATABASE语句用于在Impala中创建新数据库。
CREATE DATABASE IF NOT EXISTS database_name;
~~~ # 这⾥,IF NOT EXISTS是一个可选的子句。
~~~ 如果我们使用此子句,则只有在没有具有相同名称的现有数据库时,才会创建具有给定名称的数据库。
[linux123:21000] > create database yanqitest;
Query: create database yanqitest
[linux123:21000] > show databases;
+------------------+----------------------------------------------+
| name | comment |
+------------------+----------------------------------------------+
| _impala_builtins | System database for Impala builtin functions |
| default | Default Hive database |
| yanqitest | |
+------------------+----------------------------------------------+
~~~ # 默认就会在hive的数仓路径下创建新的数据库名文件夹/user/hive/warehouse/yanqitest.db
[root@linux123 ~]# hdfs dfs -ls /user/hive/warehouse/
drwxrwxrwx - impala supergroup 0 2021-08-31 19:17 /user/hive/warehouse/yanqitest.db
### --- 删除数据库
~~~ Impala的DROP DATABASE语句用于从Impala中删除数据库。
~~~ 在删除数据库之前,建议从中删除所有表。
~~~ # 如果使⽤用级联删除,Impala会在删除指定数据库中的表之前删除它。
[linux123:21000] > drop database yanqitest cascade;
二、表特定语句
### --- create table语句
~~~ CREATE TABLE语句用于在Impala中的所需数据库中创建新表。
~~~ 需要指定表名字并定义其列和每列的数据类型。impala支持的数据类型和hive类似.
~~~ 默认建表的数据存储路径跟hive一致。也可以在建表的时候通过location指定具体路径。
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 my_db.student(name STRING, age INT, contact INT );
### --- insert 语句
~~~ Impala的INSERT语句有两个子句: into和overwrite。
~~~ into⽤用于插入新记录数据,overwrite用于覆盖已有的记录。
~~~ 这里,column1,column2,... columnN是要插入数据的表中的列的名称。
~~~ 还可以添加值而不指定列名,但是,需要确保值的顺序与表中的列的顺序相同。
insert into table_name (column1, column2, column3,...columnN)values (value1,value2, value3,...valueN);
Insert into table_name values (value1, value2, value2);
### --- 例子
~~~ overwrite覆盖子句覆盖表当中全部记录。 覆盖的记录将从表中永久删除。
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 );
Insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );
### --- select语句:Impala SELECT语句
~~~ 用于从数据库查询数据, 此查询以表的形式返回数据。
[linux123:21000] > select * from employee;
Query: select * from employee
+----+----------+-----+----------------+--------+
| id | name | age | address | salary |
+----+----------+-----+----------------+--------+
| 5 | Hardik | 27 | Bhopal | 40000 |
| 3 | kaushik | 23 | Kota | 30000 |
| 6 | Komal | 22 | MP | 32000 |
| 1 | Ram | 26 | Vishakhapatnam | 37000 |
| 2 | Khilan | 25 | Delhi | 15000 |
| 4 | Chaitali | 25 | Mumbai | 35000 |
| 1 | Ramesh | 32 | Ahmedabad | 20000 |
+----+----------+-----+----------------+--------+
Insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );
[linux123:21000] > select * from employee;
Query: select * from employee
+----+------+-----+----------------+--------+
| id | name | age | address | salary |
+----+------+-----+----------------+--------+
| 1 | Ram | 26 | Vishakhapatnam | 37000 |
+----+------+-----+----------------+--------+
### --- describe 语句
~~~ Impala中的describe语句用于提供表的描述。
~~~ 此语句的结果包含有关表的信息,例如列名称及其数据类型。
[linux123:21000] > describe employee;
Query: describe employee
+---------+--------+---------+
| name | type | comment |
+---------+--------+---------+
| id | int | |
| name | string | |
| age | int | |
| address | string | |
| salary | bigint | |
+---------+--------+---------+
### --- alter table
~~~ Impala中的Alter table语句用于对给定表执行更改。
~~~ 使用此语句,我们可以添加,删除或修改现有表中的列,也可以重命名它们。
~~~ 参考Hive实现。
### --- delete、truncate table
~~~ Impala drop table语句用于删除Impala中的现有表。
~~~ 此语句还会删除内部表的底层HDFS文件。
~~~ # 注意:使用此命令时必须小心,因为删除表后,表中可用的所有信息也将永远丢失。
drop table database_name.table_name;
~~~ # Impala的Truncate Table语句用于从现有表中删除所有记录。保留表结构。
~~~ 您也可以使用DROP TABLE命令删除一个完整的表,但它会从数据库中删除完整的表结构,
~~~ 如果您希望存储一些数据,您将需要重新创建此表。
truncate table_name;
~~~ # Impala对复杂数据类型的支持
~~~ 对于Text存储格式中的复杂类型不支持,复杂类型要使用parquet格式。
[linux123:21000] > select * from t2;
Query: select * from t2
+--------------------+------+-----+--------+
| id | name | age | gender |
+--------------------+------+-----+--------+
| 392456197008193000 | 张三 | 20 | 0 |
| 392456197008193000 | 张三 | 20 | 0 |
| 392456197008193000 | 张三 | 20 | 0 |
+--------------------+------+-----+--------+
Fetched 3 row(s) in 5.66s
### --- 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;
### --- 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,包含空值的⾏将最后排列。
### --- group by子句
~~~ Impala GROUP BY子句与SELECT语句协作使用,以将相同的数据排列到组中。
select name, sum(salary) from employee group by name;
### --- having⼦句
~~~ 容易与where过滤进行混淆,
~~~ # 如何区分:
~~~ where:过滤的数据是原始数据,表中本来就存在的数据;
~~~ having:过滤的是查询结果数据;
~~~ 按年龄对表进行分组,并选择每个组的最大工资,并显示大于20000的工资
select max(salary) from employee group by age having max(salary) > 20000;
### --- limit、offset
~~~ Impala中的limit子句用于将结果集的行数限制为所需的数,
~~~ 即查询的结果集不包含超过指定限制的记录。
~~~ # ⼀般来说,
~~~ select查询的resultset中的行从0开始。使用offset子句,我们可以决定从哪⾥里考虑输出。
~~~ 使用offset关键字要求结果数据必须是排序之后的!!
[linux123:21000] > select * from employee order by salary limit 2 offset 2;
Query: select * from employee order by salary limit 2 offset 2
三、 Impala导入数据
### --- insert into values
~~~ 这种⽅式非常类似于RDBMS的数据插入方式。
create table t_test2(id int,name string);
insert into table t_test2 values(1,”zhangsan”);
### --- insert into select
~~~ 插入一张表的数据来自于后面的select查询语句返回的结果。
### --- create table as select
~~~ 建表的字段个数、类型、数据来自于后续的select查询语句。
~~~ load data方式,这种方式不建议在Impala中使用,
~~~ 先使用load data方式把数据加载到Hive表中,然后使用以上方式插入Impala表中。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」