jdbc - 如何从 Java 代码设置 Hive 配置属性 hive.exec.dynamic.partition

标签 jdbc hive thrift

我制作了一个 java 脚本,它将使用 Hiveserver2 连接到配置单元,并将创建表和管理表,用于简单的创建、删除、插入数据工作正常。

我想创建带分区的外部表,为此我需要更改以下配置单元属性的值,

hive.exec.dynamic.partition = true
hive.exec.dynamic.partition.mode = nonstrict

在 hive cli 中,我可以使用 SET 和属性名称来完成,但是如何在 java 代码中完成。

这是我的 Java 代码:

 public class HiveJdbcClient {

    private static String strDriverName = "org.apache.hive.jdbc.HiveDriver";
    public static void main(String[] args) throws SQLException {
        try{
        Class.forName(strDriverName);
        } catch (ClassNotFoundException e){
            e.printStackTrace();
            System.out.println("No class found");
            System.exit(1);
        }
        Connection con = DriverManager.getConnection("jdbc:hive2://172.11.1.11:10000/default","root","root123");
        Statement stmt = con.createStatement();
        String strTableName = "testtable";

        //stmt.execute("drop table " + strTableName);
        //creating staging table that will load the data to partition data

        String strStagingTableSql = "create table if not exists "+strTableName+"_staging "+ " (SEQUENCE_NO DECIMAL, DATE_KEY INT, ACTIVITY_TIME_KEY INT, Ds_KEY INT, Ds_VALUE DECIMAL, TL_DATE_KEY INT) ROW FORMAT DELIMITED FIELDS TERIMANTED BY '~'";
        String strMainTableSql = "create external table if not exists "+strTableName+" (SEQUENCE_NO DECIMAL, ACTIVITY_TIME_KEY INT, Ds_KEY INT, Ds_VALUE DECIMAL, TL_DATE_KEY INT) PARTITIONED BY (DATE_KEY INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' LOCATION '/informatica/dwh/teradata/testtable'";
        String strCreateSql = "create external table if not exists "+ strTableName + " (key int, value string) row format delimited fields terminated by ','";
        boolean res = stmt.execute(strCreateSql);
        //show tables
        String sql = "show tables '" + strTableName + "'";
        ResultSet res1 = stmt.executeQuery(sql);

        if (res1.next()){
            System.out.println(res1.getString(1));
        }

        sql = "describe "+ strTableName;
        System.out.println("Running: "+ sql);
        res1 = stmt.executeQuery(sql);
        while (res1.next()){
            System.out.println(res1.getString(1) + "\t" + res1.getString(2));
        }

        // load data into table
        // NOTE: filepath has to be local to the hive server
        // NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
        String strFilepath = "/informatica/testing_hive_client_java.txt";
        sql = "load data inpath '" + strFilepath + "' into table " + strTableName;
        System.out.println("Running: " + sql);
        res = stmt.execute(sql);

        sql = "select count(1) from "+ strTableName;
        System.out.println("Running: "+ sql);
        res1 = stmt.executeQuery(sql);
        while(res1.next()){
            System.out.println(res1.getString(1));
        }



    }// end of main 

}// end of class

请各位高手畅所欲言

最佳答案

我能够通过以下代码解决我的问题。

boolean resHivePropertyTest = stmt
                .execute("SET hive.exec.dynamic.partition = true");
        resHivePropertyTest = stmt
                .execute("SET hive.exec.dynamic.partition.mode = nonstrict");

因为代码是 JDBC 客户端代码,所以执行将在配置单元中执行它,所以这对我有用。

关于jdbc - 如何从 Java 代码设置 Hive 配置属性 hive.exec.dynamic.partition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30952186/

相关文章:

java - 只打印查询字符串的长度

node.js - 如何使用Node JS连接Hive服务器

hadoop - Hive 当前日期函数

hadoop - 如何从 spark thrift 服务器使用 hadoop?

tomcat - 如何确定上传连接是否安全 (ssl)?

hadoop - 为什么 Mutation 不为现有列插入

java - 导出项目jar文件中的jdbc

java - JDBC SQL 服务器 : The value is not set for the parameter number

java - java "Context"类的用途是什么?

hadoop - 执行以下 Hive 查询 : SELECT COUNT(*) FROM TABLE; for a table with 8bn rows/40 columns/400Gb? 的大概数字是多少