更新时间:2024-08-03 GMT+08:00

Phoenix 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); 
                     conn.commit();
                     // 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标准。