zoukankan      html  css  js  c++  java
  • 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中动态列类型兼容即可。
  • 相关阅读:
    vue
    Html5的本地储存 Web Storage
    java json解析(转)
    Python常用字符编码(转)
    特殊符号集锦(转)
    neo4j性能调优(转)
    hadoop fs -text和hadoop fs -cat的区别(转)
    docker和dockerfile极简入门(转)
    docker原理(转)
    neo4j配置(转)
  • 原文地址:https://www.cnblogs.com/luweiseu/p/8691856.html
Copyright © 2011-2022 走看看