分享

hive Driver类为什么不提供iterator功能

pamire 发表于 2017-1-19 13:24:32 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 5584
借网上一个关于Driver的例子来说明一下:


import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.ql.Driver;
import org.apache.hadoop.hive.ql.session.SessionState;

public class Test {
    public static void main(String args[]) {
        Vector<String> res = new Vector<String>();
        String sql = "SELECT * from test";
       Driver driver = new Driver(new HiveConf(SessionState.class));
        int ret = driver.run(sql);
        try {
            driver.getResults(res);
        } catch(IOException e) {
            e.printStackTrace();
        }
        driver.close();
        System.out.println(driver.getMaxRows());
        try {
            System.out.println(driver.getSchema());
            //System.out.println(driver.getThriftSchema());
        } catch(Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
//        System.out.println(res);
//        System.out.println(ret);
    }
}

Driver类没有象jdbc ResultSet一相提供next()遍历函数,若遇到类似select * from t;大量数据如何处理(假设大得足以若内存吃不消)
测试是它把结果集都放到里,感觉不太友好,有其它的解决办法吗?或能解释一下它为什么这么设计?

已有(1)人评论

跳转到指定楼层
qcbb001 发表于 2017-1-19 14:52:02
应该有循环的,如下面例子
[mw_shl_code=java,true]package example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HiveJDBC {

    private static String HiveDriver="org.apache.hadoop.hive.jdbc.HiveDriver";
    private static String url="jdbc:hive://hadoop1:10001/default";
    private static String name="";
    private static String password="";

    public static void main(String[] args) {   
        try {
            Class.forName(HiveDriver);
            Connection conn = DriverManager.getConnection(url,name,password);
            Statement stat=conn.createStatement();
            String sql="show tables";   
            String sqlString = "select * from addressall_2015_07_09";
            ResultSet rs = stat.executeQuery(sqlString);
            while(rs.next()){
                //hive是从1开始的
                //System.out.println(rs.getString(1));  
                System.out.println(rs.getString(1)+" "+rs.getInt(2)+" "+rs.getInt(3)+" "+rs.getInt(4));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }   
    }
}[/mw_shl_code]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条