zoukankan      html  css  js  c++  java
  • [Phoenix] 三、DML语法

    摘要: 云HBASE上Phoenix支持的DML语法 从一个或者多个表中查询数据。LIMIT(或者FETCH FIRST) 在ORDER BY子句后将转换为top-N查询。

    云HBASE上Phoenix支持的DML

    1. select
    2. upsert values
    3. upsert select
    4. delete

    1. SELECT

    Screen_Shot_2017_11_21_at_23_47_23

    从一个或者多个表中查询数据。
    LIMIT(或者FETCH FIRST) 在ORDER BY子句后将转换为top-N查询。
    OFFSET子句指定返回查询结果前跳过的行数。

    示例

    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

    2. UPSERT VALUES

    Screen_Shot_2017_11_22_at_08_37_30

    此处upsert语义有异于标准SQL中的Insert,当写入值不存在时,表示写入数据,否则更新数据。其中列的声明是可以省略的,当省略时,values指定值的顺序和目标表中schema声明列的顺序需要一致。

    ON DUPLICATE KEY是4.9版本中的功能,表示upsert原子写入的语义,在写入性能上弱于非原子语义。相同的row在同一batch中按照执行顺序写入。

    示例

    UPSERT INTO TEST VALUES('foo','bar',3);
    UPSERT INTO TEST(NAME,ID) VALUES('foo',123);
    UPSERT INTO TEST(ID, COUNTER) VALUES(123, 0) ON DUPLICATE KEY UPDATE COUNTER = COUNTER + 1;
    UPSERT INTO TEST(ID, MY_COL) VALUES(123, 0) ON DUPLICATE KEY IGNORE;

    3. UPSERT SELECT

    Screen_Shot_2017_11_24_at_08_35_23

    从另外一张表中读取数据写入到目标表中,如果数据存在则更新,否则插入数据。插入目标表的值顺序和查询表指定查询字段一致。当auto commit被打开并且select子句没有聚合时,写入目标表这个过程是在server端完成的,否则查询的数据会先缓存在客户端再写入目标表中(phoenix.mutate.upsertBatchSize表示从客户端一次commit的行数,默认10000行)。

    示例

    UPSERT INTO test.targetTable(col1, col2) SELECT col3, col4 FROM test.sourceTable WHERE col5 < 100
    UPSERT INTO foo SELECT * FROM bar;

    4. DELETE

    Screen_Shot_2018_03_12_at_17_05_29

    删除选定的列。如果auto commit打开,删除操作将在server端执行。

    示例

    DELETE FROM TABLENAME;
    DELETE FROM TABLENAME WHERE PK=123;
    DELETE FROM TABLENAME WHERE NAME LIKE '%';

    References

    转自:https://yq.aliyun.com/articles/531683

     


    交流

    如果大家对HBase有兴趣,致力于使用HBase解决实际的问题,欢迎加入Hbase技术社区群交流:

    微信HBase技术社区群,假如微信群加不了,可以加秘书微信: SH_425 ,然后邀请您。

     

     

    ​  钉钉HBase技术社区群

  • 相关阅读:
    secureCRT 实现windows和linux文件互传
    Mybatis Generator最完整配置详解
    部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    阿里云服务器实战: Linux MySql5.6数据库乱码问题
    如何将 Java 项目转换成 Maven 项目
    Windows7下Maven环境搭建及其使用
    Java HashMap工作原理及实现
    关于tomcat部署应用的三种方式
    关于浏览器缓存
    MySql使用存储过程实现事务的提交或者回滚
  • 原文地址:https://www.cnblogs.com/hbase-community/p/8685857.html
Copyright © 2011-2022 走看看