一、数据文件处理
加载数据:
1、insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式加载批量数据
2、load data方式:再进行批量插入时使用这种方式比较合适
3、来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。
空值处理:
impala将“\n”表示为NULL,在结合sqoop使用是注意做相应的空字段过滤,
也可以使用以下方式进行处理:
alter table name set tblproperties (“serialization.null.format”=“null”)
三、Impala JDBC 访问
加载数据:
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'
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");
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
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存在查询不出数据的情况
尽量使用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();
}
}