文档

通过JDBC方式访问Presto

更新时间:

创建了包含Presto服务的集群后,如果您需要进行复杂的数据查询、分析和处理操作,或者需要将查询结果集成到Java应用程序中,则可以使用Presto提供的JDBC Driver连接数据库。

在Maven中引入JDBC Driver

您需要根据您的E-MapReduce集群版本,在pom.xml文件中添加相应的依赖来引入Presto JDBC Driver。

组件版本

JDBC Driver

Driver类名

0.2XX

<dependency>
    <groupId>com.facebook.presto</groupId>
    <artifactId>presto-jdbc</artifactId>
    <version>0.2XX</version>
</dependency>

com.facebook.presto.jdbc.PrestoDriver

其中,Java版本需要为Java 8或更高版本,且所有使用者都需被授予system.jdbc表的查询权限。

数据库连接

您可以通过如下JDBC URL,使用JDBC Driver连接数据库。

jdbc:presto://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]

连接示例如下所示。

jdbc:presto://master-1-1:8889               # 连接数据库,使用Catalog和Schema。
jdbc:presto://master-1-1:8889/hive          # 连接数据库,使用Catalog(hive)和Schema。
jdbc:presto://master-1-1:8889/hive/default  # 连接数据库,使用Catalog(hive)和Schema(default)。

连接参数

JDBC Driver支持多种配置参数,这些参数可以通过以下两种方式传入:

  • 使用Properties对象。

    String url = "jdbc:presto://<主节点名称>:8889/hive/default";
    Properties properties = new Properties();
    properties.setProperty("user", "presto");
    Connection connection = DriverManager.getConnection(url, properties);
    //......进行数据库操作
  • 直接在URL中指定。

    String url = "jdbc:presto://<主节点名称>:8889/hive/default?user=presto";
    Connection connection = DriverManager.getConnection(url);
    //......进行数据库操作

常用参数说明如下。

参数名称

格式

参数说明

user

STRING

用于身份验证和授权的用户名。

password

STRING

用于LDAP身份验证的密码。

socksProxy

STRING:NUMBER

SOCKS代理服务器地址。例如localhost:1080。

httpProxy

STRING:NUMBER

HTTP代理服务器地址。例如localhost:8888。

SSL

BOOLEAN

是否使用HTTPS连接。默认值为false。

SSLKeyStorePath

STRING

存储KeyStore文件的路径。

SSLKeyStorePassword

STRING

KeyStore的访问密码。

SSLTrustStorePath

STRING

指向Java TrustStore文件的路径。

SSLTrustStorePassword

STRING

Java TrustStore的访问密码。

KerberosRemoteServiceName

STRING

Kerberos服务的名称。

KerberosPrincipal

STRING

Kerberos Principal名称。

KerberosUseCanonicalHostname

BOOLEAN

是否使用规范化的主机名。默认为值false。

KerberosConfigPath

STRING

Kerberos配置文件的路径。

KerberosKeytabPath

STRING

Kerberos KeyTab文件的路径。

KerberosCredentialCachePath

STRING

Kerberos Credential缓存文件的路径。

示例

下面是Java使用JDBC Driver连接数据库的示例代码。

Connection connection = null;
Statement statement = null;
try {
    // 根据组件名称使用正确的JDBC URL。
    String url = "jdbc:presto://<主节点名称>:8889/hive/default";
    Properties properties = new Properties();
    properties.setProperty("user", "presto");
    // 创建连接对象。
    connection = DriverManager.getConnection(url, properties);
    // 创建Statement对象。
    statement = connection.createStatement();
    // 执行查询。
    ResultSet rs = statement.executeQuery("select * from t1");
    // 获取结果。
    int columnNum = rs.getMetaData().getColumnCount();
    int rowIndex = 0;
    while (rs.next()) {
        rowIndex++;
        for(int i = 1; i <= columnNum; i++) {
            System.out.println("Row " + rowIndex + ", Column " + i + ": " + rs.getInt(i));
        }
    }
} catch(SQLException e) {
    LOG.ERROR("Exception thrown.", e);
} finally {
  // 销毁Statement对象。
  if (statement != null) {
      try {
        statement.close();
    } catch(Throwable t) {
        // No-ops
    }
  }
  // 关闭连接。
  if (connection != null) {
      try {
        connection.close();
    } catch(Throwable t) {
        // No-ops
    }
  }
}

相关文档

如果您只是进行简单的数据查询操作,建议使用命令行的方式访问Presto,详情请参见通过命令行方式访问Presto