Phoenix直接建表(推荐,直接通过Phoenix建表,不能使用bulkload,后续备份恢复不方便)
CREATE TABLE NFT:T_COLLECTION_TEST (
a_key VARCHAR PRIMARY KEY, a_col VARCHAR) SALT_BUCKETS = 20;
SALT_BUCKETS 预分区字段,为了解决热点的region问题;范围为1-256。
使用预分区的表不能使用hbase api插入数据得使用Phoenix API,SALT_BUCKETS主要能提升并发读写性能。
Hbase方式(不推荐)适合通过Hbase API来写入,修改,但是存量数据可以用此方式。
第一步 : Hbase建表 create '表名',{NAME=>'列族',VERSION=>最大版本数(一般设置为1即可),[MIN_VERSIONS=>最小版本数],[TTL=设置版本存活时间以秒计算],BLOOMFILTER='ROW'或'ROWCOL'} hbase(main):>create 't1',{NAME =>'f1', COMPRESSION => 'SNAPPY', VERSIONS => 1, BLOOMFILTER => 'ROW'},{SPLITS => ['00e1fb4fb0674d24e5a6579f8fe32060','1d148c39d210c886dc02e8468f89a539']} //它还支持lzo和snappy等压缩格式,splits为分割点,用于预分区,分区数的设定依据数据规模(行/列)而定,分割点的采集需要考虑作为rowkey的数据 第二步:Phoenix视图,只能查询不能修改 CREATE view "NFT:T_COLLECTION_TEST"(
CREATE table "NFT:T_COLLECTION_TEST"( |
Tips 查看分区:scan 'hbase:meta',{FILTER=>"PrefixFilter('table_name')"}
索引:(推荐在写入数据前建索引)
比较难区的为本地索引和全局索引:
简单的定义 :数据量小,更新频繁的优先使用本地索引。数据量大,更新频率低的优先使用全局索引;
全局索引,本地索引不同点 和 比较
直白话:全局索引是表,适合重读轻写的场景 ,会单独写个表
本地索引是列族,适合重写轻读的场景,
1.索引数据
global index单独把索引数据存到一张表里,保证了原始数据的安全,侵入性小
local index把数据写到原始数据里面,侵入性强,原表的数据量=原始数据+索引数据,使原始数据更大
2.性能方面
global index要多写出来一份数据,写的压力就大一点,但读的速度就非常快,索引也需要分区,用HBAE映射的表需要 手动指定分区数量。
local index只用写一份索引数据,节省不少空间,但多了一步通过rowkey查找数据,写的速度非常快,读的速度就没有直接取自己的列族数据快。
在线方式创建索引: CREATED INDEX IDX_SLUG_RELATION_DISTINCT ON NFT.T_COLLECTION_SLUG_RELATION_INFO("info"."CHAIN_ID","info"."COLLECTION_ADDRESS","info"."SLUG","info"."EXTERNAL_SLUG") INCLUDE("info"."CHAIN_ID","info"."COLLECTION_ADDRESS"); -- 可选 索引指定分区数 离线异步方式创建索引: 1)create index IDX_T_COLLECTION_SLUG_RELATION_INFO_TEST on NFT.T_COLLECTION_SLUG_RELATION_INFO_TEST(col1, col2) async |
索引字段要求where条件的查询字段写在on里面 ,对于查询结果字段可以写在INCLUDE里面。
查看索引状态
SELECT |
遇到失效的索引直接重建
ALTER INDEX IF EXISTS "IDX_SLUG_RELATION_DISTINCT" on "NFT.T_COLLECTION_SLUG_RELATION_INFO" REBUILD;
序列:
CREATE SEQUENCE use_users_sequence CACHE 1000; --创建序列 SELECT sequence_schema, sequence_name, start_with, increment_by, cache_size FROM SYSTEM."SEQUENCE"; --查询所有序列 select next value for use_users_sequence; -- 下一个值 select current value for use_users_sequence; -- 当前序列 DROP SEQUENCE use_users_sequence; -- 删除序列 UPSERT VALUES INTO use_users(autoid, col1, col2) VALUES( NEXT VALUE FOR use_users_sequence, '11', '22'); -- 使用序列插入 |
快照:
hbase shell>disable 'NFT:T_COLLECTION_ITEM_INFO' enable 恢复表 2.制作快照 3.克隆快照为新的名字 4.删除快照 5.删除原来表 hbase shell> drop 'NFT:T_COLLECTION_ITEM_INFO' |
Tips:
-- 统计数据条数
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'NFT:T_COLLECTION_ITEM_INFO'
--SELECT COUNT (*) FROM NFT.T_COLLECTION_ITEM_INFO