• Spark中的Phoenix Dynamic Columns


    代码及使用示例:https://github.com/wlu-mstr/spark-phoenix-dynamic

    phoenix dynamic columns

    HBase的数据模型是动态的,很多系统得益于这一特性。在使用了Phoenix后自然也希望继续使用动态schema特性,有幸,Phoenix支持dynamic column.

    例如:
    Query

    SELECT eventTime, lastGCTime, usedMemory, maxMemory
    FROM EventLog(lastGCTime TIME, usedMemory BIGINT, maxMemory BIGINT)
    WHERE eventType = 'OOM' AND lastGCTime < eventTime - 1
    Where you may have defined only a subset of your event columns at create time, since each event type may have different properties:
    

    建表

    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);
    

    Spark 中使用Phoenix

    Phoenix 提供了Spark的插件,通过saveToPhoenix 插入数据。但是不支持dynamic插入特性。

    解决思路

    • 重写两个Function去实现新的saveToPhoenix;
    • upsert sql由用户去写,而不是拼装生成;
    • 动态列的ColumnType其实不影响upesrt语句的执行,只要动态列的数据类型和upsert sql中动态列类型兼容即可。
  • 相关阅读:
    装饰器模式
    doraemon的python 三元函数
    doraemon的python 文件操作
    doraemon的python 深浅拷贝和文件操作
    doraemon的python 集合
    doraemon的python 字典
    doraemon的python 列表
    doraemon 周总结1
    doraemon的python 练习
    doraemon的python之旅 整型、布尔值和字符串2
  • 原文地址:https://www.cnblogs.com/luweiseu/p/8691856.html
Copyright © 2020-2023  润新知