如何以编程方式将Hbase与Apache Drill的JDBC驱动程序连接

How to connect Hbase With JDBC driver of Apache Drill programmatically

我试图以编程方式使用Apache Drill的JDBC驱动程序。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.sql.DriverManager

object SearchHbaseWithHbase {
  def main(args: Array[String]): Unit = {
    Class.forName("org.apache.drill.jdbc.Driver")
    val zkIp ="192.168.3.2:2181"
    val connection = DriverManager.getConnection(s"jdbc:drill:zk=${zkIp};schema:hbase")
    connection.setSchema("hbase")

    println(connection.getSchema)
    val st = connection.createStatement()
    val rs = st.executeQuery("SELECT * FROM Label")
    while (rs.next()){
      println(rs.getString(1))
    }
  }
}

我已将数据库模式设置为类型:hbase,例如:

1
connection.setSchema("hbase")

但是它失败,并显示错误代码:

Exception in thread"main" java.sql.SQLException: VALIDATION ERROR:
From line 1, column 15 to line 1, column 19: Table 'Label' not found
SQL Query null

Label表正好在我的hbase中退出。
使用sqline时,我可以找到我的数据:

1
2
3
sqline -u jdbc:drill:zk....
use hbase;
input :select * from Label;

我已经解决了这个问题。我混淆了钻的模式和jdbc驱动程序模式...
正确的代码应类似于:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 object SearchHbaseWithHbase{
  def main(args: Array[String]): Unit = {
    Class.forName("org.apache.drill.jdbc.Driver")
    val zkIp ="192.168.3.2:2181"
    val p = new java.util.Properties
    p.setProperty("schema","hbase")

//    val connectionInfo = new ConnectionInfo
    val url = s"jdbc:drill:zk=${zkIp}"
    val connection = DriverManager.getConnection(url, p)
//    connection.setSchema("hbase")
//    println(connection.getSchema)
    val st = connection.createStatement()
    val rs = st.executeQuery("SELECT * FROM Label")
    while (rs.next()){
      println(rs.getString(1))
    }
  }
}