可以这么理解,Impala是性能最高的SQL引擎,速度快。
关系数据库和Impala
Impala使用类似于SQL和HiveQL的Query语言。 下面描述了SQL和Impala查询语言之间的一些关键差异。
- 关系型数据库
使用SQL语言;
可以更新或删除单个记录;
支持事务;
支持索引;
处理的数据量(TB)相对Impala较少。 - Impala
使用类似HiveQL的类似SQL的查询语言;
无法更新或删除单个记录;
不支持事务;
不支持索引;
存储和管理大量数据(PB)
impala 创建数据库
在Impala中,数据库是一种在其命名空间中保存相关表,视图和函数的构造。 它在HDFS中表示为目录树; 它包含表分区和数据文件。
--创建数据库
CREATE DATABASE IF NOT EXISTS database_name;
--删除数据库
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT |
CASCADE] [LOCATION hdfs_path];
--选择数据库
USE db_name;
impala TABLE语句
--创建新表
create table IF NOT EXISTS database_name.table_name (
column1 data_type,
column2 data_type,
column3 data_type,
………
columnN data_type
);
--添加新记录
insert into table_name (column1, column2, column3,...columnN)
values (value1, value2, value3,...valueN);
--覆盖表中的数据
Insert overwrite table_name values (value1, value2, value2);
--选择提取数据
SELECT column1, column2, columnN from table_name;
SELECT * FROM table_name;
select id, name, age from customers;
--表描述
Describe table_name;
--更改表的名称
ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name;
ALTER TABLE my_db.customers RENAME TO my_db.users;
--添加列的基本语法
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...]);
ALTER TABLE users ADD COLUMNS (account_no BIGINT,
phone_no BIGINT);
--删除列
ALTER TABLE name DROP [COLUMN] column_name;
--更改列的名称和类型
ALTER TABLE users CHANGE phone_no e_mail string;
--删除表
drop table if exists my_db.student;
--创建视图
CREATE VIEW IF NOT EXISTS customers_view AS
select name, age from customers;
--更改视图
Alter view customers_view as select id, name,
salary from customers;
--删除视图
DROP VIEW database_name.view_name;
其他语句
--排序
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST];
Select * from customers ORDER BY id asc;
--聚合
select data from table_name Group BY col_name
--having
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST];
select max(salary) from customers group by age having max(salary) > 20000;
--distinct
select distinct id, name, age, salary from customers;
常用记录
表连接(三个表关联)
select distinct name from (select car_no,fuel_type,corp_id from (select car_no,fuel_type from gpsdb.base_car) t1
LEFT OUTER JOIN (select logistic_id corp_id,car_no lic_plt_no from tmsdb.its_transport_car where car_no<>'') t2 on t1.car_no =t2.lic_plt_no) t3
LEFT OUTER JOIN (select * from tmsdb.its_sys_company) t4 on t3.corp_id = t4.id