2016-08-03 1 views
-2

Я создаю функцию преобразования C++ с базой данных HP Vertica, и я хочу читать данные из 2 столбцов из двух разных таблиц и хранить их в 2 вектора. Затем он выведет количество вхождений каждого элемента из одного вектора во втором. Проблема в том, что эти столбцы не имеют одинакового количества строк. Когда я ввел в систему код, который использовал, я обнаружил, что он читает ввод в очень большие времена, чем размер таблицы. Вот код, который я использую.Как читать данные из столбцов, не имеющих одинакового количества строк в базе данных HP vertica DB?

virtual void processPartition(ServerInterface &srvInterface, 
           PartitionReader &inputReader, 
           PartitionWriter &outputWriter) 
{ 

      try { 
      std::vector<string> vectcomb; 
      std::vector<string> vectrule; 
     if (inputReader.getNumCols() != 2) 
      vt_report_error(0, "Function only accepts 2 argument, but %zu provided", inputReader.getNumCols()); 

      try{ 
      int a=0 ; 
     do { 


      srvInterface.log("[occurence] data load %d ",a); 
      a++; 

      if(inputReader.isNull(1)){vectcomb.emplace_back(inputReader.getStringRef(0).str());} 
      else {vectcomb.emplace_back(inputReader.getStringRef(0).str()); 
      vectrule.emplace_back(inputReader.getStringRef(1).str());} 

     } while (inputReader.next()); 
      }catch(exception& e){ srvInterface.log("[occurence] exception catched");} 

      for(int i=0;i<vectcomb.size();i++) { 
        int occ=0; 
        srvInterface.log("[occurence] test %d ",i); 
        for(int j=0;j<vectrule.size();j++) { 
          if(vectrule.at(j).find(vectcomb.at(i)) != std::string::npos) {occ++ ;} 
                   } 
          outputWriter.setInt(0,occ) ; outputWriter.next() ; 
        } 

    } catch(exception& e) { 
     // Standard exception. Quit. 
     vt_report_error(0, "Exception while processing partition: [%s]", e.what()); 
    } 
} 
}; 

ответ

0

Что-то не делают сцены для меня, UDX в основном работает в верхней части набора результатов запроса, так что я предполагается UDX получает два столбца из набора результатов в качестве входных данных, имея сказать, что проблема, которую вы ссылаетесь to недействительно и не может существовать. Это будет очень полезно, если вы сможете предоставить больше информации о том, как вы планируете выполнять этот UDX.

Смежные вопросы