impala入门(一篇就够了)

简介: impala入门(一篇就够了)

01 引言

最近因为DataX需要集成impala,所以有必要学习下impala,本文来讲解下。

02 impala概述

2.1 简介

简介:Impala是一个MPP(大规模并行处理)SQL查询引擎:

  • 是一个用C ++Java编写的开源软件;
  • 用于处理存储在Hadoop集群中大量的数据;
  • 性能最高的SQL引擎(提供类似RDBMS的体验),提供了访问存储在Hadoop分布式文件系统中的数据的最快方法。

优点:

  • 使用impala,用户可以使用传统的SQL知识以极快的速度处理存储在HDFSHBaseAmazon s3中的数据中的数据,而无需了解JavaMapReduce作业)。
  • 由于在数据驻留(在Hadoop集群上)时执行数据处理,因此在使用Impala时,不需要对存储在Hadoop上的数据进行数据转换和数据移动。

缺点:

  • 不提供任何对序列化和反序列化的支持;
  • 只能读取文本文件,而不能读取自定义二进制文件;
  • 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。

2.2 架构

impala主要由以下三个组件组成:

  • Impala daemon(守护进程)
  • Impala Statestore(存储状态)
  • Impala元数据或metastore(元数据即元存储)

下面来讲解下。

2.2.1 Impalad(守护进程)

daemon安装在Impala的每个节点上运行,它接受来自各种接口的查询,然后将工作分发到Impala集群中的其它Impala节点来并行化查询,结果返回到中央协调节。

可以将查询提交到专用Impalad或以负载平衡方式提交到集群中的另一Impalad

2.2.2 Statestore(存储状态)

Statestore负责检查每个Impalad的运行状况,然后经常将每个Impala Daemon运行状况中继给其他守护程序,如果由于任何原因导致节点故障的情况下,Statestore将更新所有其他节点关于此故障,并且一旦此类通知可用于其他Impalad,则其他Impala守护程序不会向受影响的节点分配任何进一步的查询。

2.2.3 metadata(元数据)/metastore(元存储)

Impala使用传统的MySQLPostgreSQL数据库来存储表定义和列信息这些元数据

当表定义或表数据更新时,其它Impala后台进程必须通过检索最新元数据来更新其元数据缓存,然后对相关表发出新查询。

03 impala 安装

详细安装方式可以参考:https://www.w3cschool.cn/impala/impala_environment.html

安装方式这里不会详解,大致讲一下流程:

  • 下载QuickStartVM
  • 下载cloudera-quickstart-vm-5.5.0-0-virtualbox.ovf文件后,我们需要使用虚拟盒导入
  • 然后启动Impala,打开终端并执行命令:impala-shell

04 impala 接口

Impala提供了三种方式去做查询处理

  • Impala-shell :命令窗口中键入impala-shell命令来启动Impala shell
  • Hue界面 :您可以使用Hue浏览器处理Impala查询;
  • ODBC / JDBC驱动程序 :与其他数据库一样,Impala提供ODBC / JDBC驱动程序。

在做查询处理之前,很有必要了解impala的数据类型:

数据类型 描述
BIGINT 此数据类型存储数值,此数据类型的范围为-9223372036854775808至9223372036854775807.此数据类型在create table和alter table语句中使用
BOOLEAN 此数据类型只存储true或false值,它用于create table语句的列定义
CHAR 此数据类型是固定长度的存储,它用空格填充,可以存储最大长度为255
DECIMAL 此数据类型用于存储十进制值,并在create table和alter table语句中使用
DOUBLE 此数据类型用于存储正值或负值4.94065645841246544e-324d -1.79769313486231570e + 308范围内的浮点值
FLOAT 此数据类型用于存储正或负1.40129846432481707e-45 … 3.40282346638528860e + 38范围内的单精度浮点值数据类型
INT 此数据类型用于存储4字节整数,范围从-2147483648到2147483647
SMALLINT 此数据类型用于存储2字节整数,范围为-32768到32767
STRING 这用于存储字符串值
TIMESTAMP 此数据类型用于表示时间中的点
TINYINT 此数据类型用于存储1字节整数值,范围为-128到127
VARCHAR 此数据类型用于存储可变长度字符,最大长度为65,535
ARRAY 这是一个复杂的数据类型,它用于存储可变数量的有序元素
Map 这是一个复杂的数据类型,它用于存储可变数量的键值对
Struct 这是一种复杂的数据类型,用于表示单个项目的多个字段

05 impala 查询处理

5.1 database

创建数据库:

-- 示例:
CREATE DATABASE IF NOT EXISTS database_name;

删除数据库:

-- 语法:
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT | 
CASCADE] [LOCATION hdfs_path];
-- 示例:
DROP DATABASE IF EXISTS sample_database;

选择数据库:

-- 语法:
USE db_name;

5.2 table

创建表:

-- 语法:
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 into table_name (column1, column2, column3,...columnN) values (value1, value2, value3,...valueN);
insert overwrite table_name values (value1, value2, value2);
-- 示例:
insert into employee (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 );
insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );

查询表:

-- 语法:
SELECT column1, column2, columnN from table_name;
--示例:
select name, age from customers; 

表描述:

-- 语法:
describe table_name;
-- 示例:
describe customer;

修改表(重命名表案例,其它自行查阅):

-- 语法:
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;

删除表:

-- 语法:
DROP table database_name.table_name;
--示例:
drop table if exists my_db.student;

截断表:

-- 语法:
truncate table_name;
-- 示例:
truncate customers;

显示表:

show tables 

创建视图:

-- 语法:
Create View IF NOT EXISTS view_name as Select statement
-- 示例:
CREATE VIEW IF NOT EXISTS customers_view AS select name, age from customers;

修改视图:

-- 语法
ALTER VIEW database_name.view_name为Select语句
-- 示例
Alter view customers_view as select id, name, salary from customers;

删除视图:

-- 语法:
DROP VIEW database_name.view_name;
-- 示例:
Drop view customers_view;

5.3 条件

order by 子句:

--语法
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
--示例
Select * from customers ORDER BY id asc;

group by 字句:

-- 语法
select data from table_name Group BY col_name;
-- 示例
Select name, sum(salary) from customers Group BY 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;

limit限制:

-- 语法:
select * from table_name order by id limit numerical_expression;

offset偏移:

-- 示例:
select * from customers order by id limit 4 offset 0;

union聚合:

-- 语法:
query1 union query2;
-- 示例:
select * from customers order by id limit 3
union select * from employee order by id limit 3;

with子句:

-- 语法:
with x as (select 1), y as (select 2) (select * from x union y);
-- 示例:
with t1 as (select * from customers where age>25), 
   t2 as (select * from employee where age>25) 
   (select * from t1 union select * from t2);

distinct去重:

-- 语法:
select distinct columns… from table_name;
-- 示例:
select distinct id, name, age, salary from customers; 

06 文末

本文主要讲解了impala的一些概念以及查询处理方式,谢谢大家的阅读,本文完!

目录
相关文章
|
SQL 前端开发 Java
安装部署--impala 服务启动、关闭 | 学习笔记
快速学习 安装部署--impala 服务启动、关闭
1238 0
安装部署--impala 服务启动、关闭 | 学习笔记
|
Docker Windows 容器
cpu不支持avx指令集怎么办
如果CPU不支持AVX指令集,可以考虑以下两种解决方案: 更新BIOS版本:在某些情况下,更新BIOS版本可能会支持AVX指令集。可以联系电脑厂商或者查阅相关教程进行BIOS更新。 更换支持AVX指令集的CPU:如果更新BIOS版本后仍不支持AVX指令集,那么可以考虑更换支持AVX指令集的CPU。可以根据自己的需求和预算选择适合的CPU。 另外,如果在tf1.6以后的官方的tf包都是用AVX编译的,而电脑的CPU不支持AVX指令集,那么可以考虑使用Docker来配置运行环境。但需要注意,Docker在Windows上配置稍显繁琐,并需要配置虚拟机等其他东西。 总的来说,如果不支持AVX指令
7492 1
|
存储 监控 NoSQL
快速认识OTS
## 什么是OTS   OTS 是Open Table Service的简称,现在已更名为表格存储Table Store,官网对它的解释为:OTS是构建在阿里云飞天分布式系统之上的 NoSQL 数据库服务,提供海量结构化数据的存储和实时访问。OTS 以实例和表的形式组织数据,通过数据分片和负载均衡技术,达到规模的无缝扩展。OTS 向应用程序屏蔽底层硬件平台的故障和错误,能自动从各类错误中快速
46651 2
|
存储 SQL 分布式计算
impala入门(一篇就够了)
impala入门(一篇就够了)
2427 0
impala入门(一篇就够了)
|
9月前
|
消息中间件 存储 缓存
一文带你秒懂 Kafka工作原理!
Apache Kafka 是一个高吞吐量、低延迟的分布式消息系统,广泛应用于实时数据处理、日志收集和消息队列等领域。它最初由LinkedIn开发,2011年成为Apache项目。Kafka支持消息的发布与订阅,具备高效的消息持久化能力,适用于TB级数据的处理。
|
存储 数据采集 Java
Spring Boot 3 实现GZIP压缩优化:显著减少接口流量消耗!
在Web开发过程中,随着应用规模的扩大和用户量的增长,接口流量的消耗成为了一个不容忽视的问题。为了提升应用的性能和用户体验,减少带宽占用,数据压缩成为了一个重要的优化手段。在Spring Boot 3中,通过集成GZIP压缩技术,我们可以显著减少接口流量的消耗,从而优化应用的性能。本文将详细介绍如何在Spring Boot 3中实现GZIP压缩优化。
1383 6
|
消息中间件 存储 Apache
Apache Paimon 表模式最佳实践
Apache Paimon 表模式最佳实践
3756 57
|
SQL 关系型数据库 Apache
Apache Doris 整合 FLINK CDC 、Paimon 构建实时湖仓一体的联邦查询入门
Apache Doris 整合 FLINK CDC 、Paimon 构建实时湖仓一体的联邦查询入门
2164 3
|
存储 消息中间件 API
数据湖paimon入门指南
数据湖paimon入门指南
数据湖paimon入门指南
|
SQL 存储 分布式计算
Apache Impala(demo)
Apache Impala(demo)
210 0