客快物流大数据项目(七十二):Impala sql 语法

Posted Lansonli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客快物流大数据项目(七十二):Impala sql 语法相关的知识,希望对你有一定的参考价值。

文章目录

Impala sql 语法

一、数据库特定语言

1、创建数据库

2、删除数据库

二、​​​​​​​表特定语句

1、create table 语句

2、insert语句

3、select语句

4、describe语句

5、alter table

6、delete、truncate table

7、view视图

8、order by 子句

9、group by 子句

10、having子句

11、limit ,offset

12、with 子句

13、distinct


Impala sql 语法

一、数据库特定语言

1、创建数据库

CREATE DATABASE语句用于在Impala中创建新数据库。

CREATE DATABASE IF NOT EXISTS database_name;

这里,IF NOT EXISTS可选的子句。如果我们使此子句,则只有没有具有相同名称的现有数据库时,才会创建具有给定名称的数据库。

impala默认使用impala用户执行操作,会报权限不足问题,解决办法:

1.1、给HDFS指定文件夹授予权限

hadoop fs -chmod -R 777 hdfs://node2:9000/user/hive

1.2、haoop 配置文件中hdfs-site.xml 中设置权限为false

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

/user/hive/warehouse/ittest.db

 也可以在创建数据库的时候指定hdfs路径。需要注意该路径的权限。

hadoop fs -mkdir -p /input/impala
hadoop fs -chmod -R 777 /input/impala 
create external table  t3(id int ,name string ,age int )  row  format  delimited fields terminated  by  '\\t' location  '/input/impala/external';

 

2、删除数据库

Impala的DROP DATABASE语句用于从Impala中删除数据库。 在删除数据库之前,建议从中删除所有表。

如果使用级联删除,Impala会在删除指定数据库中的表之前删除它。

DROP database sample cascade

 

二、​​​​​​​​​​​​​​表特定语句

1、create table 语句

CREATE TABLE语句用于在Impala中的所需数据库中创建新表。 需要指定表名字并定义其列和每列的数据类型

impala支持的数据类型和hive类似,除了sql类型外,还支持java类型

基本格式:

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

默认建表的数据存储路径跟hive一致。也可以在建表的时候通过location指定具体路径,需要注意hdfs权限问题。

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语句用于从数据库中的一个或多个表中提取数据。 此查询以表的形式返回数据

4、describe语句

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

Describe table_name;

此外,还可以使用hive的查询表元数据信息语句。

desc formatted table_name;

5、alter table

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

表重命名:

ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name

向表中添加列:

ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])

从表中删除列:

ALTER TABLE name DROP [COLUMN] column_name

更改列的名称和类型:

ALTER TABLE name CHANGE column_name new_name new_type

6、delete、truncate table

Impala drop table语句用于删除Impala中的现有表。此语句还会删除内部表的底层HDFS文件。

注意:使用此命令时必须小心,因为删除表后,表中可用的所有信息也将永远丢失。

DROP table database_name.table_name;

Impala的Truncate Table语句用于从现有表中删除所有记录。保留表结构。

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

truncate table_name;

 

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为Select语句

例如

以下是Alter View语句的示例

Alter view employee_view as select id, name, age, address from employee;

删除视图

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 data from table_name Group BY col_name;

10、having子句

Impala中的Having子句允许您指定过滤哪些组结果显示在最终结果中的条件。 一般来说,Having子句与group by子句一起使用; 它将条件放置在由GROUP BY子句创建的组上。

11、limit ,offset

Impala中的limit子句用于将结果集的行数限制为所需的数,即查询的结果集不包含超过指定限制的记录。一般来说,select查询的resultset中的行从0开始。使用offset子句,我们可以决定从哪里考虑输出。

12、with 子句

如果查询太复杂,我们可以为复杂部分定义别名,并使用Impala的with子句将它们包含在查询中。

格式: with x as (select 1), y as (select 2) (select * from x union y);

例如:使用with子句显示年龄大于25的员工和客户的记录。

with t1 as (select * from customers where age>25),
 t2 as (select * from employee where age>25)  (select * from t1 union select * from t2);

 

13、distinct

Impala中的distinct运算符用于通过删除重复值来获取唯一值。

select distinct columns… from table_name;

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

以上是关于客快物流大数据项目(七十二):Impala sql 语法的主要内容,如果未能解决你的问题,请参考以下文章

客快物流大数据项目(七十):Impala入门介绍

客快物流大数据项目(七十三):Impala数据导入方式

客快物流大数据项目(七十四):Impala的java开发

客快物流大数据项目(七十六):使用Impala对kudu进行DML操作

客快物流大数据项目(七十五):使用impala创建kudu表

客快物流大数据项目(七十一):impala-shell命令参数