SQL查询


功能简介

Phoenix是构建在HBase之上的一个SQL中间层,提供一个客户端可嵌入的JDBC驱动,Phoenix查询引擎将SQL输入转换为一个或多个HBase scan,编译并执行扫描任务以产生一个标准的JDBC结果集。

代码样例

  • 客户端 “hbase-example/conf/hbase-site.xml” 中配置存放查询中间结果的临时目录,如果客户端程序在Linux上执行临时目录就配置Linux上的路径,如果客户端程序在Windows上执行临时目录则配Windows上的路径。
<property>
     <name>phoenix.spool.directory</name>
     <value>[1]查询中间结果的临时目录</value>
</property>
  • JAVA样例:使用JDBC接口访问HBase
         public String getURL(Configuration conf) 
          {  
             String phoenix_jdbc = "jdbc:phoenix"; 
             String zkQuorum = conf.get("hbase.zookeeper.quorum");      
             return phoenix_jdbc + ":" + zkQuorum; 
          } 

          public void testSQL() 
          { 
             String tableName = "TEST"; 
             // Create table 
             String createTableSQL = "CREATE TABLE IF NOT EXISTS TEST(id integer not null primary key, name varchar, account char(6), birth date)"; 

             // Delete table 
             String dropTableSQL = "DROP TABLE TEST"; 

             // Insert 
             String upsertSQL = "UPSERT INTO TEST VALUES(1,'John','100000', TO_DATE('1980-01-01','yyyy-MM-dd'))"; 

             // Query 
             String querySQL = "SELECT * FROM TEST WHERE id = ?"; 

             // Create the Configuration instance 
             Configuration conf = getConfiguration(); 

             // Get URL 
             String URL = getURL(conf); 

             Connection conn = null; 
             PreparedStatement preStat = null; 
             Statement stat = null; 
             ResultSet result = null; 

             try 
             { 
                 // Create Connection 
                 conn = DriverManager.getConnection(URL); 
                 // Create Statement 
                 stat = conn.createStatement(); 
                 // Execute Create SQL 
                 stat.executeUpdate(createTableSQL); 
                 // Execute Update SQL 
                 stat.executeUpdate(upsertSQL); 
                 // Create PrepareStatement 
                 preStat = conn.prepareStatement(querySQL); 
                 // Execute query 
                 preStat.setInt(1,1); 
                 result = preStat.executeQuery(); 
                 // Get result 
                 while (result.next())  
                 { 
                     int id = result.getInt("id"); 
                     String name = result.getString(1); 
                 } 
             }  
             catch (Exception e) 
             { 
                 // handler exception 
             } 
             finally 
             { 
                 if(null != result){ 
                      try { 
                          result.close(); 
                          } catch (Exception e2) { 
                              // handler exception 
                              } 
                      } 
                 if(null != stat){ 
                     try { 
                         stat.close(); 
                      } catch (Exception e2) { 
                          // handler exception 
                      } 
                 } 
                 if(null != conn){ 
                     try { 
                         conn.close(); 
                      } catch (Exception e2) { 
                          // handler exception 
                      } 
                 } 
              } 
          }

注意事项

  • 需要在“hbase-site.xml”中配置用于存放中间查询结果的临时目录路径,该目录大小限制可查询结果集大小;
  • Phoenix实现了大部分java.sql接口,SQL紧跟ANSI SQL标准。

results matching ""

    No results matching ""