phoenix---简单学习索引
建立本地索引
1.不要配置下面三个属性,因为phoenix4.7以前需要配置。我使用的是phoenix4.14。(因为这三个属性已经过时)

2.在region server的hbase-site.xml中添加上述配置,然后重启集群,再重新创建索引(这个全局索引也使用)
<property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property>
参考网址
https://blog.csdn.net/maomaosi2009/article/details/45619047
http://outofmemory.cn/code-snippet/7937/phoenix-create-index-Mutable-secondary-indexes-must-have-the-hbase.regionserver.wal.codec-property
二,创建全局索引
警告:本地索引目前还不稳定,后期查询也不快,特别不建议使用本地索引
1.在region server的hbase-site.xml中添加上述配置,然后重启集群
<property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property>


参考:https://blog.csdn.net/maomaosi2009/article/details/45600109
三.phoenix遇到的扯淡的问题和注意事项
1.当在phoenix创建一个表怎么都删不掉时,还报错,使用下面这个命令即可.下面这个命令特别危险,如果删除指定的表,以后不能创建删除这个表的表名,它也可以删除索引。当一个异常索引怎么删也删不掉,使用下面的命令最好解决!常用的删除命令在我写的其他博客里,自己找。
//表名是 test
jdbc:phoenix:hadoop-2:2181> DELETE from SYSTEM.CATALOG where TABLE_NAME ='test'

2.还有一种扯淡的情况在phoenix上删除了‘test'表,且查看没有这个表。但在hbase shell还有这个表。导致在phoenix创建’test'报这个表已经存在。
3. 在hbase shell删除这个表了。在phoenix还是创建不成功,那就换个表名,这个是phoenix的bug。
4.注意。phoenix创建的表名和hbase shell表名不能一样!
四.phoenix与hbase里的数据建立映射
1.首先在hbase shell里创建一个表,然后在phoenix里创建一个表它俩表名一定要一样
示例代码:
hbase shell 代码 hbase(main):021:0> create 'ZOO9','f' hbase(main):021:0> put 'ZOO9','1','f:name','a' hbase(main):021:0> put 'ZOO9','1','f:address','b'
phoenix 命令行代码
jdbc:phoenix:hadoop-5:2181> create table if not exists "ZOO9"( "ROW" varchar primary key,"f"."name" varchar,"f"."address" varchar ) column_encoded_bytes=0;
2.插入数据是在hbase里插入数据,查看查询数据在phoenix里。查看phoenix客户端

3.为phoenix创建索引表
jdbc:phoenix:hadoop-5:2181> create index ZOO_index on ZOO9("f"."name","f"."address");
4.不要在phoenix插入数据,否则hbase shell查看有乱码
0: jdbc:phoenix:hadoop-5:2181> upsert into ZOO9("ROW","name", "address") values('2', '2', '2');

5.phoenix与hbase映射实战
1.创建hbase表
create 'xulinv05','f'
2.phoenix映射
create table if not exists "xulinv05"( "ROW" varchar primary key,"f".cityno varchar,"f".deptno varchar,"f".filano varchar,"f".groupno varchar,"f".machno varchar,"f".lineno varchar,"f".busno varchar,"f".isupdown varchar,"f".labelno varchar,"f".uppassenger varchar,"f".downpassenger varchar,"f".sitetime varchar,"f".instime varchar,"f".istrans varchar,"f".mark varchar,"f".stationfullra varchar,"f".totalpeoplenu varchar,"f".rowkey varchar ) column_encoded_bytes=0;
警告:phoenix与hbase映射注意点:1.表名相同,但建表时建议表名大写,因为查询phoenix时phoenix默认查询大写。这样在代码不用加双引号(select * from ZZZ05)直接查询。2.索引表的主键可以大写也可以小写,因为它带双引号,查询时也要带双引号。
3.sqoop导入数据
4.phoenix建立索引
create index index05 on "xulinv05"("f"."LINENO","f"."ISUPDOWN","f"."SITETIME");
提示有时候表名要加双引号。
5.phoenix查询
select * from "xulinv05" where rowkey='8190329080610207910' //根据主键查询 select * from "xulinv05" where "ROW"='9231419080610205297'
--------------------------------------------------------------------------------------jdbc-------------------------------------------------------------------------------
import java.sql.*; public class Test05 { private static String driver = "org.apache.phoenix.jdbc.PhoenixDriver"; public static void main(String[] args) throws SQLException { try { Class.forName(driver); Statement stmt = null; ResultSet rs = null; Connection con = DriverManager.getConnection("jdbc:phoenix:hadoop-5:2181"); stmt = con.createStatement();
// String sql = "select * from KKK05 where \"ROW\" like \'601350710200012%\'"; String sql = "select * from ZZZ05"; rs = stmt.executeQuery(sql); while (rs.next()) { System.out.print("row:"+rs.getString("row")); System.out.println(",ROWKEY:"+rs.getString("ROWKEY")); } stmt.close(); con.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
jar包

-------------------------------------------------------------------------如果是cdh环境下配置---------------------------------------------------------------------


如果报错:http://www.bubuko.com/infodetail-2517486.html
浙公网安备 33010602011771号