zoukankan      html  css  js  c++  java
  • Phoenix SQL总结

    Phoenix SQL总结

    建表语句

    --建表
    create table if not exists "student"(
    	id varchar primary key,
        name varchar
    )
    --插入数据
    upsert into "student"(id,name) values("1001","zhangsan");
    upsert into "student"(id,name) values("1002","lisi");
    upsert into "student"(id,name) values("1003","wangwu");
    upsert into "student"(id,name) values("1004","zhaoliu");
    upsert into "student"(id,name) values("1005","xiaobei");
    upsert into "student"(id,name) values("1006","xiaoxiao");
    upsert into "student"(id,name) values("1007","xiaohao");
    

    CRUD

    增删改

    --增加数据
    upsert into tablename(primary key name,col1,col2...) values(primary key value,col1 value,col2 value...)
    
    upsert into "student"(id,name) values("1008","haohao")
    
    --修改数据
    upsert into tablename(primary key name,col1,col2...) values(primary key value,col1 value,col2 value...)
    
    upsert into "student"(id,name) values("1001","xiaozhang")
    --删除数据
    delete from tablename where col1=value;
    drop table tablename;
    
    delete from "student"  where id='1007';
    drop table "student";
    
    

    --基本查询
    select id,name from student;
    --表左联接
    select s.id,s.name from student s
    left join student t
    on s.id = t.id
    --表右联接
    select s.id,s.name from student s
    right join student t
    on s.id = t.id
    --表内联接
    select s.id,s.name from student s
    inner join student t
    on s.id = t.id
    

    映射

    为什么要使用映射?

    在Hbase中直接创建的表,Phoenix不会直接显示出来,需要借助映射建立一张中间表,映射Hbase和phoenix里的数据. 该操作类似于Hive中的外部表

    视图映射

    建立视图时,需把phoenix视图名称和hbasetablename名称对应即可

    ---1.在Hbase中建立一张表并插入数据
            create 'fruit','info'
            put 'fruit','1001','info:name','apple'
    ---2.在Phoenix里建立视图
            create view "fruit"(id varchar primary key,"info"."name" varchar);
    ---3.在Phoenix里查看是否建立成功
            !table
    ---4.查询该视图表,就会对应显示Hbase里的数据
            select * from fruit;
    

    视图映射注意事项

    1. 视图映射表是只读的,作用是吧hbase里的fruit表映射到了phoenix
    2. 视图只能用作查询,不能用作修改
    3. 视图可以只映射部分数据
    4. 当我们不希望对数据进行修改操作时,可以考虑使用视图映射

    表映射

    上面提到了视图映射的使用,可视图映射只能对数据进行查询操作,如果想修改原表数据,则需使用表映射,使用表映射时,只需在视图映射建表语句的基础之上,在末尾添加column_encoded_bytes=0,该属性的意思是不对Hbase的表中数据做序列化操作,

    ---1.在Hbase中建立一张表并插入数据
            create 'fruit','info'
            put 'fruit','1001','info:name','apple'
    ---2.在Phoenix里建立视图
            create view "fruit"(id varchar primary key,"info"."name" varchar) column_encoded_bytes=0;
    ---3.在Phoenix里查看是否建立成功
            !table
    ---4.更改数据
    		upsert into "fruit" values('1001','org')
    ---5.查询该视图表,就会对应显示Hbase里的数据
            select * from fruit;
    

    思考:为什么有表映射还要使用视图映射?

    1. 使用视图映射数据为只读,更安全
    2. 使用表映射数据可读写,更方便

    二级索引

    使用索引可以提高查询速度,但会占用更大的空间

    全局索引

    全局索引介绍:

    ​ 1)查询时select后只能包含索引列
    ​ 2)使用全局索引查询时,如果 能从索引表出数据,绝对不会去原表查询
    ​ 3)写操作比较多的表效率会很低,因为写数据时要更新索引表

    --创建全局索引的语法
        create index 索引名称 on 表名 (索引列) 
    --创建多级索引的语法
        create index 索引名称 on 表名 (索引列1,索引列2)
    --删除索引的语法
        drop index 索引名称 on 原表名;
    --建立包含其他列的索引
        create index 索引名称 on 原表名(索引列) include(包含的列1,包含的列2);
        --使用include后,使用索引查询数据时可以吧include的关联的数据一起查出来
    

    本地全局索引

    本地索引介绍
    ​ 1)本地索引适合写操作比较多的场景
    ​ 2)本地索引的实现方法,就是在原表内新加了一列主键
    ​ 3)使用本地索引查询数据时,会先通过索引列找到对应列的主键,然后通过主键进行范围筛选

    --创建本地索引的语法
        create local 索引名 on 原表(索引列)
    --删除索引的语法
        drop index 索引名称 on 原表名;
    

    本地索引和全局索引的区别

    1) 本地索引适合修改写入场景多的表
    全局索引适合查询场景较多的表
    2) 空间代价
    ​ 全局高,本地低
    3) 插入修改
    ​ 本地块,全局慢
    4)查询速度
    ​ 全局快,本地慢

  • 相关阅读:
    SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。
    doAfterBody()方法是在( )接口中定义的。
    考虑下面两个JSP文件代码片断: test1.jsp:
    下列JSP代码:
    以下web.xml片断( )正确地声明servlet 上下文参数。
    以下( )可用于检索session属性userid的值。
    有关Servlet的生命周期说法正确的有( )。
    关于Web应用程序,下列说法错误的是( )。
    如何创建Cookie? (选择1项)
    HttpServlet中,用来处理POST请求的方法是(选择1项)
  • 原文地址:https://www.cnblogs.com/traveller-hzq/p/14170018.html
Copyright © 2011-2022 走看看