hbase 0.94版本支持按一个cf一个column的sum聚合
从hbase0.96开始取消了对应类,可以配合phoenix使用实现相应功能。
phoenix2,3支持hbase0.94
2.1版本以后支持可变数据的索引。
1、使用shell 命令行操作sql
2、使用java api (jdbc操作,唯一不同点是协议:jdbc:phoenix)
3、批量加载进phoenix:
①使用mapreduce,适合大数量级,写HFile,例:hadoop jarphoenix-3.0.0-incubating-client.jarorg.apache.phoenix.mapreduce.CsvBulkLoadTool --table EXAMPLE --input/data/example.csv
非主键列要明确指定cf。不支持索引的迁移,如果创建了表的索引,不用此方案。
②使用内建程序psql 例:psql.py[zookeeper] ../examples/web_stat.sql(建表语句) psql.py [zookeeper] ../examples/web_stat.csv(导入数据)
非分布式,适合G数量级
4、phoenix优化技巧:
①CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY,DESCRIPTION VARCHAR) SALT_BUCKETS=16
如果是16个regionserver ,4核,可设置成32-64
②Per-split。精确控制split。CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTIONVARCHAR) SPLIT ON ('CS','EU','NA')
③使用多个cf。不相关的列分开。
④使用压缩。CREATETABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR)COMPRESSION='GZ
⑤创建索引
⑥优化集群参数
⑦优化phoenix参数
5、phoenix查询的列要建了索引或是覆盖列才会走索引扫描。
6、phoenix快的原因:Phoenixchunks up your query using the region boundaries and runs them in parallel onthe client using a configurable number of threads
The aggregation will bedone in a coprocessor on the server-side, collapsing the amount of data thatgets returned back to the client rather than returning it all
7、自己制定timestamp:props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB,Long.toString(ts));
8、查询的条件如果不是引导主键,不会走范围扫描。