2016-08-03 19 views
-2

Ich erstelle eine C++ - Transformationsfunktion mit der HP Vertica-Datenbank und möchte Daten aus 2 Spalten aus 2 verschiedenen Tabellen lesen und in 2 Vektoren speichern. Dann gibt es die Anzahl der Vorkommen jedes Elements eines Vektors im zweiten aus. Das Problem ist, dass diese Spalten nicht die gleiche Anzahl von Zeilen haben. Als ich den Code, den ich benutzt habe, eingeloggt habe, habe ich festgestellt, dass die Eingabe viel besser war als die Tabellengröße. Hier ist der Code, den ich verwende.Wie liest man Daten aus Spalten, die nicht die gleiche Anzahl von Zeilen in HP vertica DB haben?

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()); 
    } 
} 
}; 

Antwort

0

etwas nicht Szenen mir machen, wird UDX grundsätzlich von oben auf Abfrageergebnis ausgeführt wird eingestellt, so nahm ich die UDX wird immer zwei Spalten aus den als Eingang gesetzt Ergebnisse, mit sagen, dass das Problem, das Sie sich beziehen zu ist nicht gültig und kann nicht existieren. Es wird sehr nützlich sein, wenn Sie mehr Informationen darüber zur Verfügung stellen können, wie Sie diese UDX ausführen möchten.