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中动态列类型兼容即可。
  • 相关阅读:
    SQLite简介
    dockerfiles宝藏系列
    Docker容器运行GUI程序的配置方法
    Windows神器cmder
    Typora设置标题自动添加序号
    手机往电脑备份相册
    搜索引擎的高级使用技巧
    Django Model 模型
    前后端分离是什么操作
    搭建FTP(win10版)以及基本FTP操作
  • 原文地址:https://www.cnblogs.com/luweiseu/p/8691856.html
Copyright © 2011-2022 走看看