第二章 impala基础使用

匿名 (未验证) 提交于 2019-12-02 23:55:01

不需要进入到impala-shell交互命令行当中即可执行的命令参数

impala-shell后面执行的时候可以带很多参数:

-h 查看帮助文档

impala-shell -h

-r 刷新整个元数据,数据量大的时候,比较消耗服务器性能

impala-shell -r

-B 去格式化,查询大量数据可以提高性能
--print_header 去格式化显示列名
--output_delimiter 指定分隔符
-v 查看对应版本

impala-shell -v -V

-f 执行查询文件
--query_file 指定查询文件

cd /export/servers vim impala-shell.sql use weblog; select * from ods_click_pageviews limit 10;  #通过-f 参数来执行执行的查询文件 impala-shell -f impala-shell.sql

-i 连接到impalad

-o 保存执行结果到文件当中去

impala-shell -f impala-shell.sql -o hello.txt

-p 显示查询计划

impala-shell -f impala-shell.sql -p

-q 不使用impala-shell进行查询

进入impala-shell命令行之后可以执行的语法

进入impala-shell:

impala-shell  #任意目录

帮助文档

connect hostname 连接到某一台机器上面去执行

refresh dbname.tablename 增量刷新,刷新某一张表的元数据,主要用于刷新hive当中数据表里面的数据改变的情况

用于刷新hive当中数据表里面的数据改变的情况

refresh mydb.stu;

invalidate metadata全量刷新,性能消耗较大,主要用于hive当中新建数据库或者数据库表的时候来进行刷新

invalidate metadata

用于查看sql语句的执行计划

explain select * from stu;

explain的值可以设置成0,1,2,3等几个值,其中3级别是最高的,可以打印出最全的信息

set explain_level=3;

执行sql语句之后执行,可以打印出更加详细的执行步骤,

主要用于查询结果的查看,集群的调优等

select * from stu; profile;

注意:在hive窗口当中插入的数据或者新建的数据库或者数据库表,在impala当中是不可直接查询到的,需要刷新数据库,在impala-shell当中插入的数据,在impala当中是可以直接查询到的,不需要刷新数据库,其中使用的就是catalog这个服务的功能实现的,catalog是impala1.2版本之后增加的模块功能,主要作用就是同步impala之间的元数据

1.1.1进入impala交互窗口

impala-shell #进入到impala的交互窗口
show databases;

创建数据库

CREATE DATABASE IF NOT EXISTS mydb1; drop database  if exists  mydb;

创建student表

CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT );

创建employ表

create table employee (Id INT, name STRING, age INT,address STRING, salary BIGINT);
insert into employee (ID,NAME,AGE,ADDRESS,SALARY)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 );

执行覆盖之后,表中只剩下了这一条数据了

另外一种建表语句

create table customer as select * from employee;
select * from employee; select name,age from employee; 
DROP table  mydb1.employee;
truncate  employee;
CREATE VIEW IF NOT EXISTS employee_view AS select name, age from employee;
select * from employee_view;

基础语法

select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST] Select * from employee ORDER BY id asc;
Select name, sum(salary) from employee Group BY name; 

基础语法

select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]

按年龄对表进行分组,并选择每个组的最大工资,并显示大于20000的工资

select max(salary) from employee group by age having max(salary) > 20000 
select * from employee order by id limit 4;

第一种方式,通过load hdfs的数据到impala当中去

create table user(id int ,name string,age int ) row format delimited fields terminated by "\t";

准备数据user.txt并上传到hdfs的 /user/impala路径下去

上传user.txt到hadoop上去:

hdfs dfs -put user.txt /user/impala/

查看是否上传成功:

hdfs dfs -ls /user/impala
1       kasha   15 2       fizz        20 3       pheonux    30 4       manzi  50

加载数据

load data inpath '/user/impala/' into table user;

查询加载的数据

select  *  from  user;

如果查询不不到数据,那么需要刷新一遍数据表

refresh  user;

第二种方式:

create  table  user2   as   select * from  user;

第三种方式:

insert  into  #不推荐使用 因为会产生大量的小文件

千万不要把impala当做一个数据库来使用

第四种方式:

insert  into  select  #用的比较多
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!