Skip to content
This repository was archived by the owner on May 9, 2024. It is now read-only.

Commit a49ea45

Browse files
akroviakovkurapov-peter
authored andcommitted
reduce query pre-exec copies
1 parent bf91404 commit a49ea45

32 files changed

+165
-150
lines changed

omniscidb/ArrowStorage/ArrowStorage.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,9 @@ void ArrowStorage::fetchVarLenArrayData(const TableData& table,
337337
}
338338
}
339339

340-
TableFragmentsInfo ArrowStorage::getTableMetadata(int db_id, int table_id) const {
340+
std::shared_ptr<const TableFragmentsInfo> ArrowStorage::getTableMetadata(
341+
int db_id,
342+
int table_id) const {
341343
mapd_shared_lock<mapd_shared_mutex> data_lock(data_mutex_);
342344
CHECK_EQ(db_id, db_id_);
343345
CHECK_EQ(tables_.count(table_id), (size_t)1);
@@ -349,11 +351,11 @@ TableFragmentsInfo ArrowStorage::getTableMetadata(int db_id, int table_id) const
349351
return getEmptyTableMetadata(table_id);
350352
}
351353

352-
TableFragmentsInfo res;
353-
res.setPhysicalNumTuples(table.row_count);
354+
std::shared_ptr<TableFragmentsInfo> res = std::make_shared<TableFragmentsInfo>();
355+
res->setPhysicalNumTuples(table.row_count);
354356
for (size_t frag_idx = 0; frag_idx < table.fragments.size(); ++frag_idx) {
355357
auto& frag = table.fragments[frag_idx];
356-
auto& frag_info = res.fragments.emplace_back();
358+
auto& frag_info = res->fragments.emplace_back();
357359
frag_info.fragmentId = static_cast<int>(frag_idx + 1);
358360
frag_info.physicalTableId = table_id;
359361
frag_info.setPhysicalNumTuples(frag.row_count);
@@ -364,23 +366,24 @@ TableFragmentsInfo ArrowStorage::getTableMetadata(int db_id, int table_id) const
364366
frag_info.setChunkMetadata(columnId(col_idx), frag.metadata[col_idx]);
365367
}
366368
}
367-
res.setTableStats(table.table_stats);
369+
res->setTableStats(table.table_stats);
368370
return res;
369371
}
370372

371-
TableFragmentsInfo ArrowStorage::getEmptyTableMetadata(int table_id) const {
372-
TableFragmentsInfo res;
373-
res.setPhysicalNumTuples(0);
373+
std::shared_ptr<TableFragmentsInfo> ArrowStorage::getEmptyTableMetadata(
374+
int table_id) const {
375+
std::shared_ptr<TableFragmentsInfo> res = std::make_shared<TableFragmentsInfo>();
376+
res->setPhysicalNumTuples(0);
374377

375378
// Executor requires dummy empty fragment for empty tables
376-
FragmentInfo& empty_frag = res.fragments.emplace_back();
379+
FragmentInfo& empty_frag = res->fragments.emplace_back();
377380
empty_frag.fragmentId = 0;
378381
empty_frag.setPhysicalNumTuples(0);
379382
empty_frag.deviceIds.push_back(0); // Data_Namespace::DISK_LEVEL
380383
empty_frag.deviceIds.push_back(0); // Data_Namespace::CPU_LEVEL
381384
empty_frag.deviceIds.push_back(0); // Data_Namespace::GPU_LEVEL
382385
empty_frag.physicalTableId = table_id;
383-
res.fragments.push_back(empty_frag);
386+
res->fragments.push_back(empty_frag);
384387

385388
return res;
386389
}
@@ -828,8 +831,6 @@ void ArrowStorage::refragmentTable(TableData& table,
828831
meta->fillChunkStats(computeStats(
829832
col_arr->Slice(frag.offset, frag.row_count * elems_count), col_type));
830833
} else {
831-
int32_t min = 0;
832-
int32_t max = -1;
833834
meta->fillChunkStats(0, -1, /*has_nulls=*/true);
834835
}
835836
frag.metadata[col_idx] = meta;

omniscidb/ArrowStorage/ArrowStorage.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ class ArrowStorage : public SimpleSchemaProvider, public AbstractDataProvider {
7373
std::unique_ptr<Data_Namespace::AbstractDataToken> getZeroCopyColumnData(
7474
const ColumnRef& col_ref) override;
7575

76-
TableFragmentsInfo getTableMetadata(int db_id, int table_id) const override;
76+
std::shared_ptr<const TableFragmentsInfo> getTableMetadata(int db_id,
77+
int table_id) const override;
7778

7879
const DictDescriptor* getDictMetadata(int dict_id, bool load_dict = true) override;
7980

@@ -217,7 +218,7 @@ class ArrowStorage : public SimpleSchemaProvider, public AbstractDataProvider {
217218
std::shared_ptr<arrow::Schema> rhs);
218219
ChunkStats computeStats(std::shared_ptr<arrow::ChunkedArray> arr,
219220
const hdk::ir::Type* type);
220-
TableFragmentsInfo getEmptyTableMetadata(int table_id) const;
221+
std::shared_ptr<TableFragmentsInfo> getEmptyTableMetadata(int table_id) const;
221222
void fetchFixedLenData(const TableData& table,
222223
size_t frag_idx,
223224
size_t col_idx,

omniscidb/DataMgr/AbstractBufferMgr.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ class AbstractBufferMgr {
103103

104104
virtual const DictDescriptor* getDictMetadata(int dict_id, bool load_dict = true) = 0;
105105

106-
virtual TableFragmentsInfo getTableMetadata(int db_id, int table_id) const = 0;
106+
virtual std::shared_ptr<const TableFragmentsInfo> getTableMetadata(
107+
int db_id,
108+
int table_id) const = 0;
107109

108110
// Buffer API
109111
virtual AbstractBuffer* alloc(const size_t numBytes = 0) = 0;

omniscidb/DataMgr/BufferMgr/BufferMgr.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,10 @@ class BufferMgr : public AbstractBufferMgr { // implements
180180
return nullptr;
181181
}
182182

183-
TableFragmentsInfo getTableMetadata(int db_id, int table_id) const override {
183+
std::shared_ptr<const TableFragmentsInfo> getTableMetadata(int db_id, int table_id)
184+
const override {
184185
UNREACHABLE();
185-
return TableFragmentsInfo{};
186+
return std::make_shared<TableFragmentsInfo>(TableFragmentsInfo{});
186187
}
187188

188189
// Buffer API

omniscidb/DataMgr/DataMgr.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,8 @@ const DictDescriptor* DataMgr::getDictMetadata(int dict_id, bool load_dict) cons
525525
return getPersistentStorageMgr()->getDictMetadata(dict_id, load_dict);
526526
}
527527

528-
TableFragmentsInfo DataMgr::getTableMetadata(int db_id, int table_id) const {
528+
std::shared_ptr<const TableFragmentsInfo> DataMgr::getTableMetadata(int db_id,
529+
int table_id) const {
529530
return getPersistentStorageMgr()->getTableMetadata(db_id, table_id);
530531
}
531532

omniscidb/DataMgr/DataMgr.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ class DataMgr {
214214

215215
const DictDescriptor* getDictMetadata(int dict_id, bool load_dict = true) const;
216216

217-
TableFragmentsInfo getTableMetadata(int db_id, int table_id) const;
217+
std::shared_ptr<const TableFragmentsInfo> getTableMetadata(int db_id,
218+
int table_id) const;
218219

219220
BufferProvider* getBufferProvider() const { return buffer_provider_.get(); }
220221

omniscidb/DataMgr/DataMgrDataProvider.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ DataMgrDataProvider::getZeroCopyColumnData(const ColumnRef& col_ref) {
3535
return data_mgr_->getZeroCopyColumnData(col_ref);
3636
}
3737

38-
TableFragmentsInfo DataMgrDataProvider::getTableMetadata(int db_id, int table_id) const {
38+
std::shared_ptr<const TableFragmentsInfo> DataMgrDataProvider::getTableMetadata(
39+
int db_id,
40+
int table_id) const {
3941
return data_mgr_->getTableMetadata(db_id, table_id);
4042
}
4143

omniscidb/DataMgr/DataMgrDataProvider.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class DataMgrDataProvider : public DataProvider {
3838
std::unique_ptr<Data_Namespace::AbstractDataToken> getZeroCopyColumnData(
3939
const ColumnRef& col_ref) override;
4040

41-
TableFragmentsInfo getTableMetadata(int db_id, int table_id) const override;
41+
std::shared_ptr<const TableFragmentsInfo> getTableMetadata(int db_id,
42+
int table_id) const override;
4243

4344
const DictDescriptor* getDictMetadata(int dict_id,
4445
bool load_dict = true) const override;

omniscidb/DataMgr/PersistentStorageMgr/PersistentStorageMgr.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ const DictDescriptor* PersistentStorageMgr::getDictMetadata(int dict_id, bool lo
133133
return nullptr;
134134
}
135135

136-
TableFragmentsInfo PersistentStorageMgr::getTableMetadata(int db_id, int table_id) const {
136+
std::shared_ptr<const TableFragmentsInfo> PersistentStorageMgr::getTableMetadata(
137+
int db_id,
138+
int table_id) const {
137139
return getStorageMgrForTableKey({db_id, table_id})->getTableMetadata(db_id, table_id);
138140
}
139141

omniscidb/DataMgr/PersistentStorageMgr/PersistentStorageMgr.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ class PersistentStorageMgr : public AbstractBufferMgr {
5656

5757
const DictDescriptor* getDictMetadata(int dict_id, bool load_dict = true);
5858

59-
TableFragmentsInfo getTableMetadata(int db_id, int table_id) const override;
59+
std::shared_ptr<const TableFragmentsInfo> getTableMetadata(int db_id,
60+
int table_id) const override;
6061

6162
void registerDataProvider(int schema_id, std::shared_ptr<AbstractBufferMgr>);
6263

0 commit comments

Comments
 (0)