Phoenix

更新时间: 2023-07-26 17:58:24

Apache Phoenix是构建在HBase上的SQL中间层。Phoenix引擎支持使用SQL进行HBase数据的查询。

前提条件

已创建选择了Phoenix和HBase服务的DataServing或自定义集群,详情请参见创建集群

使用Phoenix

  1. 使用SSH方式连接集群,详情请参见登录集群

  2. 执行以下命令,切换为hadoop用户。

    su - hadoop
  3. 执行以下命令,进入bin目录。

    cd /opt/apps/PHOENIX/phoenix-current/bin
  4. 执行以下命令,使用Phoenix的命令行工具。

    sqlline.py
  5. 您可以使用SQL进行数据操作。

    • 创建表

      CREATE TABLE example(
          my_pk bigint not null,
          m.first_name varchar(50),
          m.last_name varchar(50) 
          CONSTRAINT pk PRIMARY KEY (my_pk));
    • 插入数据

      UPSERT INTO example(my_pk,m.first_name,m.last_name) VALUES(100,'Jack','Ben');
      UPSERT INTO example(my_pk,m.first_name,m.last_name) VALUES(200,'Jack3','Ben3');
    • 查询数据

      SELECT * FROM example;

      返回信息如下所示:

      +--------+-------------+------------+
      | MY_PK  | FIRST_NAME  | LAST_NAME  |
      +--------+-------------+------------+
      | 100    | Jack        | Ben        |
      | 200    | Jack3       | Ben3       |
      +--------+-------------+------------+
    • 删除表

      DROP TABLE example;

JDBC访问Phoenix

配置Maven依赖

<dependency>
     <groupId>org.apache.phoenix</groupId>
     <artifactId>phoenix-core</artifactId>
     <version>${phoenix.version}</version>
</dependency>

参考案例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class TestPhoenixJdbc {

    public static void main(String[] args) throws SQLException {
        Statement stmt = null;
        ResultSet rset = null;

        Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
        Connection con = DriverManager.getConnection("jdbc:phoenix:[zookeeper quorum hosts]");
        stmt = con.createStatement();

        stmt.executeUpdate("create table test (mykey integer not null primary key, mycolumn varchar)");
        stmt.executeUpdate("upsert into test values (1,'Hello')");
        stmt.executeUpdate("upsert into test values (2,'World!')");
        con.commit();

        PreparedStatement statement = con.prepareStatement("select * from test");
        rset = statement.executeQuery();
        while (rset.next()) {
            System.out.println(rset.getString("mycolumn"));
        }
        statement.close();
        con.close();
    }
}

其中,JDBC URL语法为jdbc:phoenix:[comma-separated ZooKeeper Quorum Hosts[: ZK port [:hbase root znode [:kerberos_principal [:path to kerberos keytab] ] ] ]

相关文档

Phoenix更多信息可以参见官方文档:

阿里云首页 开源大数据平台E-MapReduce 相关技术圈