zoukankan      html  css  js  c++  java
  • Phoenix踩坑填坑记录


    记录Phoenix开发过程中的填坑记录。

    部分原文地址:phoenix 常见问题与总结

    Phoenix建表语句

    CREATE TABLE IF NOT EXISTS BUS_INFO_GPS_DATA(busno VARCHAR(10) not null,gpsTime VARCHAR(20) not null,linename VARCHAR(30),upordown VARCHAR(2),weidu VARCHAR(20),jingdu VARCHAR(20),CONSTRAINT  PK_BUS_INFO_GPS_DATA PRIMARY KEY (busno,gpsTime)) ;
    

    如果在PRIMARY KEY (busno,gpsTime))主键当中,调换busno和gpsTime的顺序,则Phoenix建表会报错,需调整至字段顺序一致才可。

    若PRIMARY KEY (busno,gpsTime)),则其他的字段属性如果设置了not null属性,会报错。

    如何添加二级索引

    1) 不加排序:Create INDEX 索引名 ON 表名(列名A,列表B***) 
    2) 加排序:Create INDEX 索引名 ON 表名(列名A DESC,列表B***)
    
    举例如下:
    
    create INDEX id_idx on tower_info("tower_id" ASC ,"create_time"  DESC ,"system","sub_system")
    

    判断某表是否存在

    DatabaseMetaData connMetaData = conn.getMetaData();
    String[] type = {"TABLE"};
    ResultSet rs = connMetaData.getTables(null, null, null, type);
    boolean testFlag = false;
    while (rs.next()){
        String tt=rs.getString("TABLE_NAME");
        if(tt.equals("TEST")){
            testFlag = true;
        }
        String tp=rs.getString("TABLE_TYPE");
        System.out.println(" 表的名称 "+tt+"   表的类型 "+tp);
    }
    

    判断索引是否存在

    DatabaseMetaData connMetaData = conn.getMetaData();
    ResultSet index = connMetaData.getIndexInfo(null, null,
            “表名”, false, true);
    boolean toweridIdxFlag = false;
    while (index.next()){
        String name=index.getString("INDEX_NAME");
        if(name.equals("TOWERID_IDX")){
            toweridIdxFlag =true;
        }
        System.out.println(" 索引的名称 "+name);
    }
    

    Date类型日期,条件判断

    select * from test where "create_time" >= TO_DATE(TO_CHAR(?,'yyyy-MM-dd HH:mm:ss'))
    

    杂项

    a. phoenix 使用rowkey模糊查询效率特别低
    b. Phoenix中建立hbase的映射表不只是加载元数据,还会为HBase 中每一条数据增加一空列标识,如果数据量太大,可能导致超时中断。建议先建立好Phoenix映射表,然后加载数据或增加服务端配置,延长服务端超时时间。
    c. 异步方式构建索引过程中,出现问题:不识别Phoenix中小写字母表,不知是不是版本低的问题。
    d. 创建Phoenix二级索引后,只能通过Phoenix接口加载数据,直接操作hbase无效的,也就是说只能通过jdbc和加载CSV文件方式加载数据。
    e. 为已有数据phoenix表补建索引,亦可能导致超时中断。建议建立phoenix-HBase表时即建好索引,再接数据。

  • 相关阅读:
    【ST】lab01——Junit and Eclemma
    【SPM】hw1——个人房间装修
    【ST】hw2——find the error in the follow case
    【ST】Describe an error from my past projects
    ST homework4 --- 图覆盖
    ST lab1——Junit和覆盖测试的初探
    ST work12——failure,fault,error
    ST work1——印象最深的一个bug DJI 激活时报 SDK_ACTIVE_SDK_VERSION_ERROR
    C# note 06——delegate 和 event
    C# note 05——异常处理
  • 原文地址:https://www.cnblogs.com/aixing/p/13327337.html
Copyright © 2011-2022 走看看