Search code examples
c++hbasethrift

hbase thrift2 TGet.columns not working


I want to retrieve get column family1:qualifier1,but I get all columns in the row '123'

TGet get;
TColumn tcolumn;
tcolumn.family="family1";
tcolumn.qualifier="qualifier1"; //i want get column family1:qualifier1
get.row = "123";
get.columns.push_back(tcolumn);

TResult result;
std::cout<<"family:" << get.columns[0].family  << " qualifier:" << get.columns[0].qualifier <<" get.columns size:" << get.columns.size() << std::endl;
transport->open();
client.get(result, "mytable", get);
transport->close();

int columnSize = result.columnValues.size(); // but i got all columns in th row
if (columnSize > 0) {
  for(int i = 0;i < columnSize ; ++i){
    std::string columnName = result.columnValues[i].qualifier;
    std::string columnValue = result.columnValues[i].value;
    std::cout << "columnName: " << columnName << std::endl;
    std::cout << "columnValue: " << columnValue << std::endl;
  }
}

Solution

  • Use function to set value, void __set_family(const std::string& val);

    do not set data member directly. std::string family;

    class TColumn {
     public:
    
      static const char* ascii_fingerprint; // = "354B89A42CE318BBBCE588A386D5D6CD";
      static const uint8_t binary_fingerprint[16]; // = {0x35,0x4B,0x89,0xA4,0x2C,0xE3,0x18,0xBB,0xBC,0xE5,0x88,0xA3,0x86,0xD5,0xD6,0xCD};
    
      TColumn() : family(), qualifier(), timestamp(0) {
      }
    
      virtual ~TColumn() throw() {}
    
      std::string family;
      std::string qualifier;
      int64_t timestamp;
    
      _TColumn__isset __isset;
    
      void __set_family(const std::string& val) {
        family = val;
      }
    
      void __set_qualifier(const std::string& val) {
        qualifier = val;
        __isset.qualifier = true;
      }
    
      void __set_timestamp(const int64_t val) {
        timestamp = val;
        __isset.timestamp = true;
      }
    
      bool operator == (const TColumn & rhs) const
      {
        if (!(family == rhs.family))
          return false;
        if (__isset.qualifier != rhs.__isset.qualifier)
          return false;
        else if (__isset.qualifier && !(qualifier == rhs.qualifier))
          return false;
        if (__isset.timestamp != rhs.__isset.timestamp)
          return false;
        else if (__isset.timestamp && !(timestamp == rhs.timestamp))
          return false;
        return true;
      }
      bool operator != (const TColumn &rhs) const {
        return !(*this == rhs);
      }
    
      bool operator < (const TColumn & ) const;
    
      uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
      uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
    
    };