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