Apache Phoenix(十五)新特性之动态列

2020-02-28  本文已影响0人  我知他风雨兼程途径日暮不赏

总结:看似很有用,但是很少有这样的需求,而且查询时候需要知道对应的列是哪个,否则无法查询出对应的数据,这些列需要被额外的保存,这样的设计更像是之前做毁的项目,通过这种方式进行补救。
有时候预先定义好的静态模式是不可行的。相反,可以在表创建时指定列的子集,而在查询时指定其余列。从Phoenix1.2后,现在支持动态地指定列,方法是允许在SELECT语句的FROM子句中的表后面的括号中包含列定义。虽然这不是标准的SQL,但是利用HBase的后期绑定能力来提供这种类型的功能是很有用的。
举例:

SELECT eventTime, lastGCTime, usedMemory, maxMemory
FROM EventLog(lastGCTime TIME, usedMemory BIGINT, maxMemory BIGINT)
WHERE eventType = 'OOM' AND lastGCTime < eventTime - 1

在创建时,您可能只定义了事件列的一个子集,因为每个事件类型可能具有不同的属性:

CREATE TABLE EventLog (
    eventId BIGINT NOT NULL,
    eventTime TIME NOT NULL,
    eventType CHAR(3) 
    CONSTRAINT pk PRIMARY KEY (eventId, eventTime))

去更新一行和动态列:

UPSERT INTO EventLog (
    eventId, eventTime, 
    eventType, 
    lastGCTime TIME,
    usedMemory BIGINT,
    maxMemory BIGINT) 
VALUES(1, CURRENT_TIME(), ‘abc’, CURRENT_TIME(), 512, 1024);
上一篇 下一篇

猜你喜欢

热点阅读