使用JDBC连接HetuEngine时开启seesion属性

举报
wild_java_coder 发表于 2021/06/26 18:06:23 2021/06/26
【摘要】 本文基于MRS-3.1.0 版本的HetuEngine样例代码https://github.com/huaweicloud/huaweicloud-mrs-example/blob/mrs-3.1.0/src/hetu-examples/hetu-examples-security/src/main/java/com/huawei/presto/JDBCExampleBroker.java使...
本文基于MRS-3.1.0 版本的HetuEngine样例代码

使用JDBC连接HetuEngine的时候,有时需要开启session属性,只需简单两步
1. 创建PrestoConnection
2.使用PrestoConnection设置session属性
具体支持哪些session属性,可以在连接上HetuEngine后通过 show session;查看
我们以开启隐式转换为例来进行说明:
设置了隐式转换可以在登录HetuEngine后执行set session implicit_conversion=true;
其效果是在会话中,自动进行数据类型的转换。例如设置前执行
hetuengine:default> select 1='1';
Query 20210626_094452_00017_tqfsx@default@HetuEngine failed: line 1:9: '=' cannot be applied to integer, varchar(1)
select 1='1'

设置后执行

hetuengine:default> set session implicit_conversion=true;
SET SESSION
hetuengine:default> select  1 = '1';
 _col0 
-------
 true  
(1 row)

现在我们通过设置jdbc连接来开启这个session属性,代码如下:

//开启隐式转换
public class JDBCExampleBroker {
    private static Properties properties = new Properties();

    private static void init() throws ClassNotFoundException {
        properties.setProperty("user", "YourUserName");
        properties.setProperty("password", "YourPassword");
        Class.forName("io.prestosql.jdbc.PrestoDriver");
    }

    public static void main(String[] args) throws ClassNotFoundException {
        String url = "jdbc:presto://{yourHSBrokerIp}:29860/hive/default?serviceDiscoveryMode=hsbroker";
        String sql = "select 1 = \'1\'";
        init();
        try {
            PrestoConnection connection = DriverManager.getConnection(url, properties).unwrap(PrestoConnection.class)
            connection.setSessionProperty("implicit_conversion","true");//注释掉后,代码抛出SQL异常 “ '=' cannot be applied to integer, varchar(1) ”
            PreparedStatement statement = connection.prepareStatement(sql.trim());            
            ResultSet resultSet = statement.executeQuery();
            Integer colNum = resultSet.getMetaData().getColumnCount();
            while (resultSet.next()) {
                for (int i = 1; i <= colNum; i++) {
                    System.out.println(resultSet.getString(i) + "\t");
                }
            }           
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

执行结果如下:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。