|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]
~~~     # 可以使用关键字ASCDESC分别按升序或降序排列表中的数据。

~~~     如果我们使用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

 

 

posted on   yanqi_vip  阅读(6)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示