void BenchmarkSetUp() { hb = new HashBuild(); hjp = new HashJoinProbe; hjp->setEvent("NO_PAPI"); hb->setKey("join"); hb->setEvent("NO_PAPI"); sm = StorageManager::getInstance(); t1 = sm->getTable("stock"); t2 = sm->getTable("order_line"); hb->addInput(t1); hb->addField(0); hjp->addInput(t2); hjp->addField(4); }
storage::c_atable_ptr_t join(const tbl_ptr& left, const tbl_ptr& right, const std::vector<size_t>& fields_left, const std::vector<size_t>& fields_right) { HashBuild hashBuild; hashBuild.addInput(left); hashBuild.setKey("join"); for (auto& field_left : fields_left) hashBuild.addField(field_left); auto hashes = hashBuild.execute()->getResultHashTable(); hyrise::access::HashJoinProbe hjp; hjp.addInput(right); for (auto& field_right : fields_right) hjp.addField(field_right); hjp.addInput(hashes); return hjp.execute()->getResultTable(); }
BENCHMARK_F(GroupByScanBase, group_by_scan_multiple_fieds_mat) { GroupByScan gs2; gs2.setEvent("NO_PAPI"); gs2.addField(0); gs2.addField(1); gs2.addInput(t); HashBuild hs; hs.setEvent("NO_PAPI"); hs.setKey("groupby"); hs.addInput(t); hs.addField(0); hs.addField(1); auto group_map = hs.execute()->getResultHashTable(); gs2.addInput(group_map); auto result = gs2.execute()->getResultTable(); MaterializingScan ms(false); ms.setEvent("NO_PAPI"); ms.addInput(result); ms.execute()->getResultTable(); }
TEST_F(HashBuildTest, check_equality) { std::shared_ptr<AbstractTable> t = Loader::shortcuts::load("test/10_30_group.tbl"); HashBuild hb; hb.addInput(t); hb.addField(1); hb.setKey("groupby"); hb.execute(); auto hash = std::dynamic_pointer_cast<const SingleAggregateHashTable >(hb.getResultHashTable()); auto t1 = storage::TableRangeView::create(t, 0, 4); auto t2 = storage::TableRangeView::create(t, 5, 9); HashBuild hb1; hb1.addInput(t1); hb1.addField(1); hb1.setKey("groupby"); hb1.execute(); auto hash1 = std::dynamic_pointer_cast<const SingleAggregateHashTable >(hb1.getResultHashTable()); HashBuild hb2; hb2.addInput(t2); hb2.addField(1); hb2.setKey("groupby"); hb2.execute(); auto hash2 = std::dynamic_pointer_cast<const SingleAggregateHashTable >(hb2.getResultHashTable()); ASSERT_TRUE(check_equality(hash, hash)); ASSERT_FALSE(check_equality(hash1, hash2)); }
TEST_F(HashBuildTest, merge_one_table_test) { std::shared_ptr<AbstractTable> t = Loader::shortcuts::load("test/10_30_group.tbl"); HashBuild hb; hb.addInput(t); hb.addField(1); hb.setKey("groupby"); hb.execute(); auto hash1 = std::dynamic_pointer_cast<const SingleAggregateHashTable >(hb.getResultHashTable()); MergeHashTables mht; mht.addInput(hash1); mht.setKey("groupby"); mht.execute(); auto hash2 = std::dynamic_pointer_cast<const SingleAggregateHashTable >(mht.getResultHashTable()); ASSERT_TRUE(check_equality(hash1, hash2)); }
BENCHMARK_F(GroupByScanBase, group_by_scan_multiple_fields) { GroupByScan gs2; gs2.setEvent("NO_PAPI"); gs2.addField(0); gs2.addField(1); gs2.addInput(t); HashBuild hs; hs.setEvent("NO_PAPI"); hs.setKey("groupby"); hs.addInput(t); hs.addField(0); hs.addField(1); auto group_map = hs.execute()->getResultHashTable(); gs2.addInput(group_map); gs2.execute()->getResultTable(); }
TEST_F(HashBuildTest, merge_two_tables_test) { // reference hash Table std::shared_ptr<AbstractTable> t = Loader::shortcuts::load("test/10_30_group.tbl"); HashBuild hb; hb.addInput(t); hb.addField(1); hb.setKey("groupby"); hb.execute(); auto hash = std::dynamic_pointer_cast<const SingleAggregateHashTable >(hb.getResultHashTable()); //test to merge two tables auto t1 = storage::TableRangeView::create(t, 0, 5); auto t2 = storage::TableRangeView::create(t, 5, 10); HashBuild hb1; hb1.addInput(t1); hb1.addField(1); hb1.setKey("groupby"); hb1.execute(); auto hash1 = std::dynamic_pointer_cast<const SingleAggregateHashTable >(hb1.getResultHashTable()); HashBuild hb2; hb2.addInput(t2); hb2.addField(1); hb2.setKey("groupby"); hb2.execute(); auto hash2 = std::dynamic_pointer_cast<const SingleAggregateHashTable >(hb2.getResultHashTable()); MergeHashTables mht; mht.addInput(hash1); mht.addInput(hash2); mht.setKey("groupby"); mht.execute(); auto hash3 = std::dynamic_pointer_cast<const SingleAggregateHashTable >(mht.getResultHashTable()); ASSERT_EQ(hash->size(), hash3->size()); ASSERT_EQ(hash->numKeys(), hash3->numKeys()); }