大數據-impala(三)
impala-shell語法
impala-shell的外部命令參數語法
不需要進入到impala-shell交互命令行當中即可執行的命令參數
impala-shell後面執行的時候可以帶很多參數:
-h 查看幫助文檔
impala-shell -h
-r 刷新整個元數據,數據量大的時候,比較消耗服務器性能
impala-shell -r
-v 查看對應版本
impala-shell -v -V
-f 執行查詢文件
cd /kkb/install
vim impala-shell.sql
select * from course.score;
通過-f 參數來執行執行的查詢文件
impala-shell -f impala-shell.sql
-p 顯示查詢計劃
impala-shell的內部命令行參數語法
進入impala-shell命令行之後可以執行的語法
help命令
幫助文檔
connect命令
connect hostname 連接到某一臺機器上面去執行
refresh 命令
refresh dbname.tablename 增量刷新,刷新某一張表的元數據,主要用於刷新hive當中數據表裏面的數據改變的情況。
refresh course.score;
invalidate metadata 命令
全量刷新,性能消耗較大,主要用於hive當中新建數據庫或者數據庫表的時候來進行刷新
invalidate metadata
explain 命令
用於查看sql語句的執行計劃
explain select * from course.score;
#explain的值可以設置成0,1,2,3等幾個值,其中3級別是最高的,可以打印出最全的信息
set explain_level=3;
profile命令
執行sql語句之後執行,可以打印出更加詳細的執行步驟,
主要用於查詢結果的查看,集羣的調優等
select * from course.score;
profile;
注意:在hive窗口當中插入的數據或者新建的數據庫或者數據庫表,在impala當中是不可直接查詢到的,需要刷新數據庫,在impala-shell當中插入的數據,在impala當中是可以直接查詢到的,不需要刷新數據庫,其中使用的就是catalog這個服務的功能實現的,catalog是impala1.2版本之後增加的模塊功能,主要作用就是同步impala之間的元數據。
創建數據庫
impala-shell進入到impala的交互窗口
查看所有數據庫
show databases;
創建與刪除數據庫
CREATE DATABASE IF NOT EXISTS mydb1;
drop database if exists mydb;
創建數據庫表並指定數據庫表數據存放hdfs的位置(與hive建表語法類似)
hdfs dfs -mkdir -p /input/impala
create external table t3(id int ,name string ,age int ) row format delimited fields terminated by '\t' location '/input/impala/external';
創建數據庫表
#創建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;
查看視圖數據
select * from employee_view;
order by語句
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
Select * from employee ORDER BY id asc;
group by 語句
Select name, sum(salary) from employee Group BY name;
having 語句
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;
limit語句
select * from employee order by id limit 4;
impala當中的數據表導入幾種方式
第一種 通過load hdfs的數據到impala當中去
create table user(id int ,name string,age int ) row format delimited fields terminated by "\t";
準備數據user.txt並上傳到hdfs的 /user/impala路徑下去
1 hello 15
2 zhangsan 20
3 lisi 30
4 wangwu 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 用的比較多