1、Impala 外部 Shell
Impala外部Shell 就是不進入Impala內部,直接執行的ImpalaShell 例如通過外部Shell查看Impala幫助可以使用: $ impala-shell -h 這樣就可以查看了;
再例如顯示一個SQL語句的執行計划: $ impala-shell -p select count(*) from t_stu
下面是Impala的外部Shell的一些參數:
• -h (--help) 幫助
• -v (--version) 查詢版本信息
• -V (--verbose) 啟用詳細輸出
• --quiet 關閉詳細輸出
• -p 顯示執行計划
• -i hostname (--impalad=hostname) 指定連接主機格式hostname:port 默認端口21000
• -r(--refresh_after_connect)刷新所有元數據
• -q query (--query=query) 從命令行執行查詢,不進入impala-shell
• -d default_db (--database=default_db) 指定數據庫
• -B(--delimited)去格式化輸出
• --output_delimiter=character 指定分隔符
• --print_header 打印列名
• -f query_file(--query_file=query_file)執行查詢文件,以分號分隔
• -o filename (--output_file filename) 結果輸出到指定文件
• -c 查詢執行失敗時繼續執行
• -k (--kerberos) 使用kerberos安全加密方式運行impala-shell
• -l 啟用LDAP認證
• -u 啟用LDAP時,指定用戶名
2、Impala內部Shell
使用命令 $ impala-sehll 可以進入impala,在這里可以像Hive一樣正常使用SQL,而且還有一些內部的impala命令:
• help
• connect <hostname:port> 連接主機,默認端口21000
• refresh <tablename> 增量刷新元數據庫
• invalidate metadata 全量刷新元數據庫
• explain <sql> 顯示查詢執行計划、步驟信息
• set explain_level 設置顯示級別(0,1,2,3)
• shell <shell> 不退出impala-shell執行Linux命令
• profile (查詢完成后執行) 查詢最近一次查詢的底層信息
例:查看幫助可以直接使用: help ,要刷新一個表的增量元數據可以使用 refresh t_stu;
3、Impala 的監護管理
可以通過下面的鏈接來訪問Impala的監護管理頁面:
• 查看StateStore
– http://node1:25020/
• 查看Catalog
– http://node1:25010/
4、Impala 存儲&&分區
下面是Impala對文件的格式及壓縮類型的支持
• 添加分區方式
– 1、partitioned by 創建表時,添加該字段指定分區列表
– 2、使用alter table 進行分區的添加和刪除操作
create table t_person(id int, name string, age int) partitioned by (type string); alter table t_person add partition (sex=‘man'); alter table t_person drop partition (sex=‘man'); alter table t_person drop partition (sex=‘man‘,type=‘boss’);
• 分區內添加數據
insert into t_person partition (type='boss') values (1,’zhangsan’,18),(2,’lisi’,23) insert into t_person partition (type='coder') values(3,wangwu’,22),(4,’zhaoliu’,28),(5,’tianqi’,24)
• 查詢指定分區數據
select id,name from t_person where type=‘coder
5、Impala SQL VS HiveQL
下面是Impala對基礎數據類型和擴展數據類型的支持
• 此外,Impala不支持HiveQL以下特性:
– 可擴展機制,例如:TRANSFORM、自定義文件格式、自定義SerDes
– XML、JSON函數
– 某些聚合函數:
• covar_pop, covar_samp, corr, percentile, percentile_approx,histogram_numeric, collect_set
• Impala僅支持:AVG,COUNT,MAX,MIN,SUM
– 多Distinct查詢
– HDF、UDAF
– 以下語句:
ANALYZE TABLE (Impala:COMPUTE STATS)、DESCRIBE COLUMN、
DESCRIBE DATABASE、EXPORT TABLE、IMPORT TABLE、SHOW
TABLE EXTENDED、SHOW INDEXES、SHOW COLUMNS
6、Impala SQL
--創建數據庫 create database db1; use db1; -- 刪除數據庫 use default; drop database db1; --創建表(內部表) -- 默認方式創建表: create table t_person1( id int, name string) --指定存儲方式: create table t_person2( id int, name string ) row format delimited fields terminated by ‘\0’ (impala1.3.1版本以上支持‘\0’ ) stored as textfile; --其他方式創建內部表 --使用現有表結構: create table tab_3 like tab_1; --指定文本表字段分隔符: alter table tab_3 set serdeproperties(‘serialization.format’=‘,’,’field.delim’=‘,’); --插入數據 -- 直接插入值方式: insert into t_person values (1,hex(‘hello world’)); --從其他表插入數據: insert (overwrite) into tab_3 select * form tab_2 ; --批量導入文件方式方式: load data local inpath ‘/xxx/xxx’ into table tab_1; --創建表(外部表) --默認方式創建表: create external table tab_p1( id int, name string ) location ‘/user/xxx.txt’ --指定存儲方式: create external table tab_p2 like parquet_tab ‘/user/xxx/xxx/1.dat’ partition (year int , month tinyint, day tinyint) location ‘/user/xxx/xxx’ stored as parquet; --視圖 --創建視圖: create view v1 as select count(id) as total from tab_3 ; --查詢視圖: select * from v1; --查看視圖定義: describe formatted v1
• 注意:
– 1)不能向impala的視圖進行插入操作
– 2)insert 表可以來自視圖
• 數據文件處理
– 加載數據:
• 1、insert語句:插入數據時每條數據產生一個數據文件,不建議用此方式加載批量數據
• 2、load data方式:再進行批量插入時使用這種方式比較合適
• 3、來自中間表:此種方式使用於從一個小文件較多的大表中讀取文件並寫入新的表生產少量的數據文件。也可以通過此種方式進行格式轉換。
– 空值處理:
• impala將“\n”表示為NULL,在結合sqoop使用是注意做相應的空字段過濾,
• 也可以使用以下方式進行處理:
alter table name set tblproperties(“serialization.null.format”=“null”)