不多說,直接上干貨!
其實,跟hive差不多,大家可以去參考我寫的hive學習概念系列。
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
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”)