Impala006-impala 資料處理&impala 和 HBase整合&JDBC方式訪問Impala
阿新 • • 發佈:2019-02-11
一、資料檔案處理
載入資料:
1、insert語句:插入資料時每條資料產生一個數據檔案,不建議用此方式載入批量資料
2、load data方式:再進行批量插入時使用這種方式比較合適
3、來自中間表:此種方式使用於從一個小檔案較多的大表中讀取檔案並寫入新的表生產少量的資料檔案。也可以通過此種方式進行格式轉換。
空值處理:
impala將“\n”表示為NULL,在結合sqoop使用是注意做相應的空欄位過濾,
也可以使用以下方式進行處理:
alter table name set tblproperties (“serialization.null.format”=“null”)
create 'test_info', 'info'
put 'test_info','1','info:name','zhangsan’
put 'test_info','2','info:name','lisi'
步驟2:建立hive表
CREATE EXTERNAL TABLE test_info(key string,name string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,info:name")
TBLPROPERTIES
("hbase.table.name" = "test_info");
步驟3:重新整理Impala表
invalidate metadata
三、Impala JDBC 訪問
儘量使用PreparedStatement執行SQL語句,原因如下:
1.效能上PreparedStatement要好於Statement
2.Statement存在查詢不出資料的情況
載入資料:
1、insert語句:插入資料時每條資料產生一個數據檔案,不建議用此方式載入批量資料
2、load data方式:再進行批量插入時使用這種方式比較合適
3、來自中間表:此種方式使用於從一個小檔案較多的大表中讀取檔案並寫入新的表生產少量的資料檔案。也可以通過此種方式進行格式轉換。
空值處理:
impala將“\n”表示為NULL,在結合sqoop使用是注意做相應的空欄位過濾,
也可以使用以下方式進行處理:
alter table name set tblproperties (“serialization.null.format”=“null”)
二、Impala可以通過Hive外部表方式和HBase進行整合
步驟如下:
步驟1:建立hbase 表,向表中新增資料create 'test_info', 'info'
put 'test_info','1','info:name','zhangsan’
put 'test_info','2','info:name','lisi'
步驟2:建立hive表
CREATE EXTERNAL TABLE test_info(key string,name string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,info:name")
TBLPROPERTIES
("hbase.table.name" = "test_info");
步驟3:重新整理Impala表
invalidate metadata
三、Impala JDBC 訪問
配置:
impala.driver=org.apache.hive.jdbc.HiveDriver
impala.url=jdbc:hive2://119.90.51.196:21050/;auth=noSasl
impala.username=
impala.password=
儘量使用PreparedStatement執行SQL語句,原因如下:
1.效能上PreparedStatement要好於Statement
2.Statement存在查詢不出資料的情況
package impala; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * * @author shenfl * */ public class TestJDBC { public static void main(String[] args) throws Exception { Class.forName("org.apache.hive.jdbc.HiveDriver"); Connection conn = DriverManager.getConnection("jdbc:hive2://119.90.51.195:21050/;auth=noSasl","" ,"" ); PreparedStatement pstm = conn.prepareStatement("select count(*) from impala.bigdata limit 1"); ResultSet rs = pstm .executeQuery(); while(rs .next()){ System. out.println(rs .getString(1)); } rs.close(); pstm.close(); conn.close(); } }