zoukankan      html  css  js  c++  java
  • Phoneix(一)简介及常用命令

    一、简介

    Apache Phoneix是运行在HBase之上的高性能关系型数据库,通过Phoneix可以像使用jdbc访问关系型数据库一样访问HBase。

    Phoneix操作的表以及数据存储在HBase上,phoneix只需要和HBase进行表关联。然后在用工具进行一些读写操作。

    可以把Phoneix只看成一种代替HBase语法的工具。虽然Java可以用jdbc来连接phoneix操作,但是在生成环境找那个,不可以用OLTP。phoenix在查询hbase时,虽然做了一些优化,但是延迟还是不小。所以依然用在OLAT中,在将结果返回存储下来。

    说明:

      当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果.

    二、常用命令

     1、登录phoneix shell

    python sqlline.py master:2181

    2、基本命令

    查看table列表  !tables
    查看表字段信息  !describe tablename
    查看执行历史  !history
    查看table 的索引  !index tablename
    其他操作 help

    3、插入数据

    在Phoneix是没有Insert语句的,取而代之的是upsert 。
    Upsert有两种用法:
    1、upsert into旨在单条插入
    upsert into tb values('ak','hhh',222)
    upsert into tb(stat,city,num) values('ak','hhh',222)
    2、upsert select旨在批量插入
    upsert into tb1 (state,city,population) select state,city,population from tb2 where population < 40000;
    upsert into tb1 select state,city,population from tb2 where population > 40000;
    upsert into tb1 select * from tb2 where population > 40000;

         注意:

        在Phoenix在插入语句并不会像传统数据库一样存在重复数据,因为phoneix是构建在HBase之上的,也就是主键唯一。后面插入数据会覆盖前面的,但是时间戳不一样。

    4、删除数据

    delete from tb; 
    清空表中所有记录,Phoenix中不能使用truncate table tb;
    delete from tb where city = 'kenai';
    drop table tb;删除表
    delete from system.catalog where table_name = 'int_s6a';
    drop table if exists tb;
    drop table my_schema.tb;
    drop table my_schema.tb cascade;用于删除表的同时删除基于该表的所有视图。

    5、更新数据

    由于HBase的主键设计,相同rowkey的内容可以直接覆盖,这就变相的更新了数据。
    所以Phoenix的更新操作仍旧是upsert into 和 upsert select
    upsert into us_population (state,city,population) values('ak','juneau',40711);

    6、查询数据

    union all, group by, order by, limit 都支持
    select * from test limit 1000;
    select * from test limit 1000 offset 100;
    select full_name from sales_person where ranking >= 5.0
    union all select reviewer_name from customer_review where score >= 8.0

    7、创建表

    a、加盐(SALT_BUCKETS)

    加盐Salting能够通过预分区(pre-splitting)数据到多个region中来显著提升读写性能。本质是在hbase中,rowkey的byte数组的第一个字节位置设定一个系统生成的byte值,这个byte值是由rowkey的byte数组做一个哈希算法,计算来的。

    SALT_BUCKETS的值范围在(1-256):

    create table TEST1(host varchar not null primary key, description  varchar)salt_buckets=16;
    upsert into TEST1 (host,description) values ('192.168.0.1','s1');
    upsert into TEST1 (host,description) values ('192.168.0.2','s2');
    upsert into TEST1 (host,description) values ('192.168.0.3','s3');

    salted table可以自动在每一个rowkey前面加上一个字节,这样对于一段连续的rowkeys,
    它们在表中实际存储时,就被自动地分布到不同的region中去了。当指定要读写该段区间内的数据时,
    也就避免了读写操作都集中在同一个region上。简而言之,如果我们用Phoenix创建了一个saltedtable,
    那么向该表中写入数据时,原始的rowkey的前面会被自动地加上一个byte(不同的rowkey会被分配不同的byte),
    使得连续的rowkeys也能被均匀地分布到多个regions。

    结果:如图;

    b、Pre-split(预分区)

    Salting能够自动的设置表预分区,但是我们得控制表是如何分区的,所以在使用phoneix建表时,可以精确的指定要根据什么值来做预分区,如下实例:

    create table TEST2 (host varchar not null primary key, description varchar) split on ('cs','eu','na');

    c、使用多列簇

    列簇包含相关的数据都在独立的文件中,在Phoneix设置多个列簇可以提高查询性能。

    如下建表语句,创建了a,b两个列簇

    create table TEST3 ( mykey varchar not null primary key, a.col1 varchar, a.col2 varchar,  b.col3 varchar);
    upsert into TEST3 values ('key1','a1','b1','c1');
    upsert into TEST3 values ('key2','a2','b2','c2');

    d、使用压缩

    create table test (host varchar not null primary key, description varchar) compression='snappy';

    8、创建视图,删除视图

    create view "my_hbase_table"( k varchar primary key, "v" unsigned_long) default_column_family='a';
    create view my_view ( new_col smallint ) as select * from my_table where k = 100;
    create view my_view_on_view as select * from my_view where new_col > 70;
    create view v1 as select *  from test where description in ('s1','s2','s3');
    drop view my_view;
    drop view if exists my_schema.my_view;
    drop view if exists my_schema.my_view cascade;

    9、创建索引

    创建二级索引支持可变数据和不可变数据(数据插入后不再更新)上建立二级索引

    create index my_idx on opportunity(last_updated_date desc);全局索引
    create index my_idx on event(created_date desc) include (name, payload) salt_buckets=10;覆盖索引并加盐
    create index my_idx on sales.opportunity(upper(contact_name));函数索引
    create index test_index on test (host) include (description);覆盖索引

    10、删除索引

    drop index 索引名 on 表名;

    11、默认是可变表,手动创建不可变表

    create table hao2 (k varchar primary key, v varchar) immutable_rows=true;
    alter table HAO2 set IMMUTABLE_ROWS = false;    修改为可变
    alter index index1 on tb rebuild;索引重建是把索引表清空后重新装配数据。

    12、Global Indexing多读少写,适合条件较少

    CREATE INDEX IPINDEX ON TEST(IP);
    调用方法:强制索引 SELECT
    /*+ INDEX(TEST IPINDEX) */ * FROM TEST WHERE IP='139.204.122.144';

    13、覆盖索引 Covered Indexes,需要include包含需要返回数据结果的列

    create index index1_c on hao1 (age) include(name);  name已经被缓存在这张索引表里了。
    对于select name from hao1 where age=2,查询效率和速度最快
    select * from hao1 where age =2,其他列不在索引表内,会全表扫描

    14、Local Indexing写多读少,不是索引字段索引表也会被使用,索引数据和真实数据存储在同一台机器上

    CREATE LOCAL INDEX IPINDEX ON TEST(IP);

  • 相关阅读:
    三、改变struts.xml默认路径后web.xml如何配置
    学习日记_SSH框架web.xml配置文件篇
    StrutsPrepareAndExecuteFilter的作用
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    HTTP协议是什么?(及get和post请求的区别)
    REST和SOAP Web Service的比较
    struts.xml中的intercepter
    Struts2 XML配置详解
    web.xml配置详解 (及<context-param>配置作用 )
    Java常量池详解
  • 原文地址:https://www.cnblogs.com/yfb918/p/10898224.html
Copyright © 2011-2022 走看看