Search code examples
jdbchbaseapache-drill

How to connect Hbase With JDBC driver of Apache Drill programmatically


I tried to use JDBC driver of Apache Drill programatically.

Here's the code:

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))
    }
  }
}

I have set the database schema with type : hbase, Like:

connection.setSchema("hbase")

But it fails with the error code:


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


The Label table is exactly exit in my hbase. I can find My data when I use sqline like:

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

Solution

  • I have solved this problem. I confused the drill's schema and jdbc driver schema...... the correct codes should be like:

     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))
        }
      }
    }