-
表的分區(在建立表時指定分區)
-
內部表
-
外部表
-
創建一張空表,然後導入數據
-
導入數據:load data local inpath '/root/data.txt' overwrite into table person;
-
查看數據:dfs -ls /usr/hive/warehouse/person;
-
UDF:用於單條數據,並且輸出一個數據行,大多數函數屬於這一類
-
UDAF:可以接受多個輸入,同時輸出一個數據行
-
UDTF:用於單個數據行同時產生多個輸出數據行
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
import org.apache.hadoop.io.IntWritable;
public class Maximum extends UDAF {
public static class MaximumIntUDAFEvaluator implements UDAFEvaluator{
private IntWritable result;
@Override
public void init() {
result = null;
}
public boolean iterate(IntWritable value){
if(value == null){
return true;
}
if(result == null){
result = new IntWritable(value.get());
} else {
result.set(Math.max(result.get(),value.get()));
}
return true;
}
public IntWritable terminatePartial(){
return result;
}
public boolean merge(IntWritable other){
return iterate(other);
}
public IntWritable terminate(){
return result;
}
}
}
import java.sql.*;
public class HiveTest {
private static final String DRIVER = "org.apache.hive.jdbc.HiveDriver";
private static final String DATABASE_PATH="jdbc:hive2://192.168.2.2:10000/default";
private static final String USER_NAME="root";
private static final String PASSWORD="123456";
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String hql = "select count(1) from person";
int count = 0;
try {
//註冊驅動
Class.forName(DRIVER);
//創建連接
conn = DriverManager.getConnection(DATABASE_PATH,USER_NAME,PASSWORD);
//創建statement
stmt = conn.createStatement();
//執行hql語句
rs = stmt.executeQuery(hql);
//處理結果集
if(rs.next()){
count = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//關閉連接
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
}
System.out.println(count);
}
}