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标准。