Я создаю функцию преобразования 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());
}
}
};