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

总结:看似很有用,但是很少有这样的需求,而且查询时候需要知道对应的列是哪个,否则无法查询出对应的数据,这些列需要被额外的保存,这样的设计更像是之前做毁的项目,通过这种方式进行补救。
有时候预先定义好的静态模式是不可行的。相反,可以在表创建时指定列的子集,而在查询时指定其余列。从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);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容